再問一個問題,很簡單


我用下面這段代碼,想得到每個像素的RGB值
       struct rgbp
       {
int r;
int g;
int b;
        };

        x=Image1->Picture->Width;
        y=Image1->Picture->Height;
        for(i=0;i<x-1;i++)
        {
                for(j=0;j<j-1;j++)
                {
                        TColor color=Image1->Canvas->Pixels[i][j];
                        rgbp[i][j].r=GetRValue(color);
                        rgbp[i][j].g=GetGValue(color);
                        rgbp[i][j].b=GetBValue(color);
                }
        }

      但是返回的各個rgbp[i][j]=0,我的圖像不是全白圖像,請問哪里錯了

8 个解决方案

#1


沒看見你定義rgbp的數組啊?
又:跟蹤檢查一下x,y值

#2


我定義了
上面忘寫了
x,y是正確的

我在在線幫助上沒找到 GetRValue這個函數,
我用edit->text跟蹤的rgbp[i][j]是空,而不是0

#3


你跟蹤一下color是多少,另外你用clRed這些標准顏色通過GetGValue函數取一下看是多少,也許是這三個函數的問題;還有你用colortoRGB函數試一下

#4


解決了,哈哈哈,我真是粗心呀,這么個問題,搞了1個多小時
for(i=0;i<x-1;i++)
        {
                for(j=0;j<j-1;j++)
                {
                   
看到沒有,應該是
for(j=0;j<y-1;j++)

#5


TColor color=Image1->Canvas->Pixels[i][j];速度太慢
用Scanline()函數吧

#6


我也覺得挺慢,Scanline()怎么寫,舉一個例子吧
還有由於用了Pixels[i][j]這個大數組,造成了機器的很大負擔,請問怎么釋放掉這些內存

#7


Graphics::TBitmap *pBitmap;
pBitmap=new Graphics;;TBimap();
pBitmap->Width=Image1->Picture->Width;
pBitmap->Height=Image1->Picture->Height;
for(i=0;i<x-1;i++)
        {
                for(j=0;j<j-1;j++)
                {
                        TColor color=Image1->Canvas->Pixels[i][j];
                        rgbp[i][j].r=GetRValue(color);
                        rgbp[i][j].g=GetGValue(color);
                        rgbp[i][j].b=GetBValue(color);
                }
        }
Image1->Picture->Bitmap->Assign(pBitmap);
delete pBitmap;
如果想減少負擔,這么做也可以啊,
Scanline的方法沒用過,給你推薦一個帖子吧
http://expert.csdn.net/Expert/topic/1114/1114093.xml?temp=.1145746
delete pBitmap;

#8


GetDIBits 

VB聲明 
Declare Function GetDIBits Lib "gdi32" Alias "GetDIBits" (ByVal aHDC As Long, ByVal hBitmap As Long, ByVal nStartScan As Long, ByVal nNumScans As Long, lpBits As Any, lpBI As BITMAPINFO, ByVal wUsage As Long) As Long 
說明 
將來自一幅位圖的二進制位復制到一幅與設備無關的位圖里 
返回值 
Long,非零表示成功,零表示失敗。在Windows 95中,返回值是返回的掃描線數量 
參數表 
參數 類型及說明 
aHDC Long,定義了與設備有關位圖hBitmap的配置信息的一個設備場景的句柄 
hBitmap Long,源位圖的句柄。絕對不能將這幅位圖選入設備場景 
nStartScan Long,欲復制到DIB中的第一條掃描線的編號 
nNumScans Long,欲復制的掃描線數量 
lpBits Any,指向一個緩沖區的指針。這個緩沖區將用於裝載采用DIB格式的信息,但不取回數據(用ByVal傳遞零值) 
lpBI BITMAPINFO,對lpBits DIB的格式及顏色進行說明的一個結構。在BITMAPINFOHEADER結構中,從biSize到biCompression之間的所有字段都必須初始化 
wUsage Long,下述常數之一: 
DIB_PAL_COLORS 在顏色表中裝載一個16位所以數組,它們與當前選定的調色板有關 
DIB_RGB_COLORS 在顏色表中裝載RGB顏色 
注解 
起始掃描線與起點有關。除非將BITMAPINFOHEADER結構的biHeight字段設為負值,否則起點就位於左下角 

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com