gpt4 book ai didi

c++ - 如何在 WinCE 中创建 .bmp

转载 作者:太空宇宙 更新时间:2023-11-04 14:28:45 28 4
gpt4 key购买 nike

我有一个相机,可以返回原始图像,这些图像可以很容易地转换为位图,可以通过以下 C# 方法(我没有编写)保存到文件中。从各种来源,我确定图片每个像素有 8 位,可能是也可能不是灰度。

private void rawImgToBmp(byte[] imgData, String fname) {
Bitmap bmp = new Bitmap(getWidth(), getHeight(),
System.Drawing.Imaging.PixelFormat.Format8bppIndexed);
for (int i = 0; i < 256; i++)
{ bmp.Palette.Entries[i] = Color.FromArgb(255, i, i, i); }
//Copy the data from the byte array into the bitmap
BitmapData bmpData =
bmp.LockBits( new Rectangle(0, 0, bmp.Width, bmp.Height),
ImageLockMode.WriteOnly, bmp.PixelFormat);
Marshal.Copy(imgData, 0, bmpData.Scan0, getWidth() * getHeight());
bmp.UnlockBits(bmpData); //Unlock the pixels
bmp.Save(FileName);
}

我的问题是:如何使用 Windows CE 4.2 的内置函数在 C++ 中编写等效方法?

erisu:感谢调色板代码,我觉得是对的。根据 Wikipedia,我已采用手动填充其余结构。页面。

最佳答案

通常我使用 CreateBitmap 或 CreateCompatibleBitmap 在 Windows 中生成位图。我不熟悉WinCE,但功能似乎存在。您的数据看起来是每像素 8 位和 256 色调色板,因此您很可能还需要 CreatePalette、SelectPalette 和 RealizePalette 函数。

类似于(警告:未经测试的代码):

HBITMAP hBmp=CreateBitmap(width, height, 1, 8, imgData);

LOGPALETTE logpal=(LOGPALETTE)new BYTE[sizeof(LOGPALETTE)+256*sizeof(PALETTEENTRY)];
logpal.palVersion=0x300;
logpal.palNumEntries=256;
int i=0;
do { //no idea your palette's format, however it looks to be greyscale?
logpal->mypal[i].peRed=i;
logpal->mypal[i].peGreen=i;
logpal->mypal[i].peBlue=i;
logpal->mypal[i].peFlags=NULL;
while(++i<256);
HPALETTE hPal=CreatePalette(logpal);

//If your trying to display it to a window's DC called mywindowsDC
HDC hBmpDC = CreateCompatibleDC(mywindowsDC);
SelectObject(hBmpDC, hBmp);
SelectPalette(hBmpDC, hPal, TRUE);
BitBlt(mywindowsDC, 0, 0, width, height, hBmpDC, 0, 0, SRCCOPY);
RealizePalette(mywindowsDC);
//clean up
DeleteDC(hBmpDC);
delete [](BYTE *)logpal;
DeleteObject(hPal);
DeleteObject(hBmp);

关于c++ - 如何在 WinCE 中创建 .bmp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/441599/

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