gpt4 book ai didi

windows - 如何在 BITMAP 被 win32 加载后编辑它

转载 作者:可可西里 更新时间:2023-11-01 11:39:09 24 4
gpt4 key购买 nike

使用 LoadImage 从文件加载 BITMAP 后:

HBITMAP renderBMP = (HBITMAP)LoadImage( NULL, filePath, IMAGE_BITMAP, 0, 0, LR_DEFAULTSIZE | LR_LOADFROMFILE );

有没有办法轻松地单独访问和编辑像素?

我可以用它来获取位图对象,但它似乎没有帮助,

BITMAP bm;
GetObject(renderBMP, sizeof(bm), &bm);

因为结构体中bmBits的值为0。

更新:

现在我遇到了这个解决方案的错误:

struct Pixel { unsigned char r,g,b,a; };
void Frame::PushMemory(HDC hdc)
{
BITMAPINFO bi;
ZeroMemory(&bi.bmiHeader, sizeof(BITMAPINFOHEADER));
bi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);

GetDIBits(hdc, renderBMP, 0, bi.bmiHeader.biHeight, NULL, &bi, DIB_RGB_COLORS);

/* Allocate memory for bitmap bits */
Pixel* pixels = new Pixel[bi.bmiHeader.biHeight * bi.bmiHeader.biWidth];
int n = sizeof(Pixel) * bi.bmiHeader.biHeight * bi.bmiHeader.biWidth;
int m = bi.bmiHeader.biSizeImage;
GetDIBits(hdc, renderBMP, 0, bi.bmiHeader.biHeight, pixels, &bi, DIB_RGB_COLORS);

// Recompute the output
//ComputeOutput(pixels);

// Push back to windows
//SetDIBits(hdc, renderBMP, 0, bi.bmiHeader.biHeight, pixels, &bi, DIB_RGB_COLORS );

//delete pixels;
}

我收到这个错误:

运行时检查失败 #2 - 变量“bi”周围的堆栈已损坏。

最后三行似乎与是否注释无关。

最佳答案

使用GetDIBits访问像素。它将所有像素复制到指定的缓冲区中。修改像素后可以使用SetDIBits将像素写回位图。

编辑:代码示例:

LPVOID lpvBits=NULL;    // pointer to bitmap bits array
BITMAPINFO bi;

ZeroMemory(&bi.bmiHeader, sizeof(BITMAPINFOHEADER));
bi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);

if (!GetDIBits(hDC, hBmp, 0, height, NULL, &bi, DIB_RGB_COLORS))
return NULL;

/* Allocate memory for bitmap bits */
if ((lpvBits = new char[bi.bmiHeader.biSizeImage]) == NULL)
return NULL;

if (!GetDIBits(hDC, hBmp, 0, height, lpvBits, &bi, DIB_RGB_COLORS))
return NULL;


/* do something with bits */


::SetDIBits( hDC, hBmp, 0, height, ( LPVOID )lpvBits, &bi, DIB_RGB_COLORS );

关于windows - 如何在 BITMAP 被 win32 加载后编辑它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4453677/

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