首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

BCB中怎么对image中的图片进行染色

2012-02-17 
BCB中如何对image中的图片进行染色?我要在BCB中对图片按RGB进行染色,即将图片中的兰色全部染为另外的颜色。

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();
}

热点排行