灰度图如何取反

我是必胜客 2012-03-23 01:36:52
在image1上载入一个8bit灰度图,在image2上显示其反色图。代码如下,有问题。请帮忙看下:

TRGBTriple *ptr;
Graphics::TBitmap *bmp = new Graphics::TBitmap();
bmp = LoadFromFile(OpenPictureDialog1 -> FileName);
Image1 -> Picture -> Graphic = bmp;
int w = bmp -> Width;
int h = bmp -> Height;
for(int j = 0; j < h; j++)
ptr = (TRGBTriple*)bmp -> ScanLine[j];
for(int i = 0; i < w; i++)
ptr[i].rgbtRed = ~ptr[i].rgbtRed;
Image2 -> Picture -> Bitmap -> Assign(bmp);

我是这样考虑的,灰度图也就是R=B=G,都是同一个值。我也意识到这样处理不正确,毕竟虽然是一个值,但是只处理一个通道并不等于处理三个通道。
那么我如何将取到灰度图的每个像素,对其进行取反处理呢?
...全文
504 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
我是必胜客 2012-03-23
  • 打赏
  • 举报
回复
你这是24bit真彩取反,我想要的是8bit灰阶取反。
wanyongjing 2012-03-23
  • 打赏
  • 举报
回复
Byte *ptr;
Graphics::TBitmap *bmp = new Graphics::TBitmap();
bmp->PixelFormat=pf24bit;
bmp = LoadFromFile(OpenPictureDialog1 -> FileName);

Image1 -> Picture -> Bitmap -> Assign(bmp);

int w = bmp -> Width;
int h = bmp -> Height;
for(int j = 0; j < h; j++)
{
ptr = (Byte*)bmp -> ScanLine[j];
for(int i = 0; i < w; i++)
{
ptr[i]= 255-ptr[i];
ptr[i*3+1]= 255-ptr[i*3+1];
ptr[i*3+2]= 255-ptr[i*3+2];
}
}
Image2 -> Picture -> Bitmap -> Assign(bmp);

13,826

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧