部份程式碼:
for( i = 0 ; i <IH ; i++ )
{
ptr = (Byte * )Image1->Picture->Bitmap->ScanLine[i];
for( j = 0 ; j < IW ; j++ )
{
R[ i ][ j ] = ptr[ j * 3 + 2 ];
G[ i ][ j ] = ptr[ j * 3 + 1 ];
B[ i ][ j ] = ptr[ j * 3 ];
} //每個座標將RGB的值分開來存放
}
-----------------------------
//以下只有展示處理R...G跟B很類似的方法
for( i = 0 ; i <IH ; i++ )
{
ptr = ( Byte * ) Image2->Picture->Bitmap->ScanLine[i];
for( j = 0 ; j < IW ; j++ )
{
ptr[j * 3 + 2 ] = R[ i ][ j ];
ptr[j * 3 + 1 ] = 0;
ptr[j * 3 ] = 0;
} //把R的值讀出來並且顯示在Image2
}
-----------------------------
for( i = 0 ; i < IH ; i++ )
{
for( j = 0 ; j < IW ; j++ )
{
TR = R[i][j];
RH[ TR ]++; TG = G[i][j];
GH[ TG ]++; TB = B[i][j];
BH[ TB ]++;
}
} //上述程式紀錄RGB 0~255每個值各有幾點
for(i=0;i<256;i++)
{
if (Rmax<RH[i])
{
Rmax=RH[i]; //如果Rmax小於RH[i],Rmax=RH[i]
} } //G跟B略
for (i=0;i<255;i++) //假設x為該畫幾點
{
x = (RH[i]*IH) / Rmax;
TempR[i]=x;
Image5->Canvas->MoveTo(i*2,IH);
Image5->Canvas->LineTo(i*2,IH-x);
}
----------------------
如果只是取出RGB值跟畫出基礎的Histogram,以上的程式碼已經足夠。我後面的程式碼雖然可以往上畫,但是卻沒有辦法縮短Histogram,因此暫時省略。
其他更高級的功能都還沒有生出來@__@
目前還卡在怎麼把長度縮短。
沒有留言:
張貼留言