gpt4 book ai didi

c++ - 从像素获取 RGB 值并将 RGB 值设置回同一像素

转载 作者:行者123 更新时间:2023-11-28 01:09:25 27 4
gpt4 key购买 nike

在下面的代码片段中,我试图在 Visual C++ 中检索像素的 RGB 值,然后将相同的 RGB 值设置回相同的像素。也就是说,这只是一个测试。但是,当我这样做时,生成的图像相似但颜色错误/关闭。生成的图像似乎完全丢失了原始图像的黄色像素。为什么在此之后我没有得到相同的图像?非常感激任何的帮助。谢谢

        BYTE *pbBitmap;
HBITMAP hDestBitmap = CreateDIBSection(memDC1, &bi, DIB_RGB_COLORS,(void**)&pbBitmap, NULL, 0);

if (hDestBitmap){
SelectObject(DestDC2, hDestBitmap);
BitBlt(DestDC2, 0, 0, nX, nY, memDC1, 0, 0, SRCCOPY);

RGBQUAD *pRGB;
LONG nPixels;
for (pRGB = (RGBQUAD *)pbBitmap, nPixels = (nX * nY); nPixels > 0; ++pRGB, --nPixels){
ULONG* pSrc =(ULONG*)pRGB;
ULONG nRed = GetRValue(*pSrc);
ULONG nGreen = GetGValue(*pSrc);
ULONG nBlue = GetBValue(*pSrc);

pRGB->rgbRed=nRed;
pRGB->rgbGreen=nGreen;
pRGB->rgbBlue=nBlue;
}

CRect rctPicture2;
m_Picture2.GetWindowRect(&rctPicture2);
ScreenToClient(&rctPicture2);
dc.SetStretchBltMode(COLORONCOLOR);
StretchBlt(dc,rctPicture2.left,rctPicture2.top,rctPicture2.Width(),rctPicture2.Height(),DestDC2,0,0,1152,864,SRCCOPY);
}

最佳答案

您访问颜色值的方式是错误的。 GetRValue 和其他函数旨在对 COLORREF 进行操作在内存中布局为 red-green-blue-reserved 的值,而 RGBQUAD 的格式是 blue-green-red-reserved。通过在 RGBQUAD 上使用 Get?Value 宏,您可以交换红色和蓝色 channel 。

关于c++ - 从像素获取 RGB 值并将 RGB 值设置回同一像素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4207398/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com