BCB中如何对image中的图片进行染色?
我要在BCB中对图片按RGB进行染色,即将图片中的兰色全部染为另外的颜色。对应的RGB值已知.
VB中已经实现:
For X = 0 To 2038 Step 15
For Y = 0 To 2038 Step 15
If form5.Picture2(p - 1).Point(X, Y) = RGB(0, 0, 255) Then
form5.Picture2(p - 1).PSet (X, Y), RGB(r(1, number + 1), g(1, number + 1), bb(1, number + 1))
End If
Next
Next
[解决办法]
Image1-> Canvas-> Pixel[i][j]取得i行j列像素的值
用这个就可以了
[解决办法]
取出的是一个整数,用宏可分解成RGB,
(TColor)RGB(r,g,b); 可以生成颜色.
[解决办法]
用ScanLine,效率更高:
void __fastcall ReplaceBlueColor(Graphics::TBitmap *bmp, TColor cl)
{
DWORD dwColor = ColorToRGB(cl);
int r = GetRValue(dwColor), g = GetGValue(dwColor), b = GetBValue(dwColor);
bmp-> PixelFormat = pf24bit;
for(int y=0; y <bmp-> Height; y++)
{
BYTE *pLine = (BYTE *)bmp-> ScanLine[y];
for(int x=0; x <bmp-> Width; x++)
{
if(pLine[2] == 0 && pLine[1] == 0 && pLine[0] == 0xFF)
{
pLine[0] = b;
pLine[1] = g;
pLine[2] = r;
}
pLine += 3;
}
}
}
//---------------------------------------
// 测试代码
void __fastcall TForm1::Button1Click(TObject *Sender)
{
// 开启双缓冲
DoubleBuffered = true;
// 这里将蓝色替换为红色(clRed),也可指定颜色数值,如0x00226D12
ReplaceBlueColor(Image1-> Picture-> Bitmap, clRed);
//
Image1-> Repaint();
}