簡體   English   中英

數組到C ++中的位圖

[英]array to bitmap in c++

我想通過將數組轉換為位圖來創建位圖。 首先,我從數據創建位圖:

BITMAPINFO info;
info.bmiHeader.biBitCount = 32;
info.bmiHeader.biClrImportant = 0;
info.bmiHeader.biClrUsed = 0;
info.bmiHeader.biCompression = BI_RGB;
info.bmiHeader.biHeight = -height(windowSize);
info.bmiHeader.biPlanes = 1;
info.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
info.bmiHeader.biSizeImage = 0;
info.bmiHeader.biWidth = width(windowSize);
info.bmiHeader.biXPelsPerMeter = 100;
info.bmiHeader.biYPelsPerMeter = 100;
Gdiplus::Bitmap *b = new Bitmap(&info, (void *)field);

然后我嘗試在屏幕上繪制它,但是它只包含黑色:

Gdiplus::Graphics *graphics = new Gdiplus::Graphics(hdc);
...
graphics->DrawImage(<pointer to bitmap>, 0, 0);

該陣列當前每個像素包含32位數據,每個組件8位。 紅色分量向左移動24位,綠色分量向左移動16位,藍色分量向左移動8位。

我可以向您保證,字段數組包含的數據中顏色並非全都是黑色。 有人知道我在做什么錯嗎?

字段數組會在圖像的整個生命周期中持續存在嗎? 使用指向圖像數據指針的位圖構造函數實際上將存儲對該數據的引用,而不是復制它。

如果要復制數據並將其存儲在Bitmap對象中,請對圖像位使用NULL(或使用不需要指向圖像位的指針的構造函數),然后使用Bitmap.LockBits函數填充數據。 您不必手動復制這些位。 只需填寫BitmapData結構並使用ImageLockModeWrite | ImageLockModeUserInputBuf標志,GDI +就會自動復制這些位。

您還可以使用Bitmap(INT,INT,INT,PixelFormat,BYTE *)構造函數來獲得更好的運氣(請參閱http://msdn.microsoft.com/zh-cn/library/ms536315%28v=vs.85%29。 aspx ),因為它使您可以更直接地控制GDI +解釋數據的方式(包括使您的數據是否包含alpha信息顯而易見)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM