關於CreateBitmapIndirect產生HBITMAP類型的問題


我現在知道一個BITMAP結構,想寫到一個內存DC中,使用下面的代碼行嗎:
         BITMAP CurrentBitmap;//結構已知
BITMAP* pBM=&CurrentBitmap;
HDC hMemDC;
HBITMAP hBM;
hMemDC=CreateCompatibleDC(::GetDC(NULL));
hBM=CreateBitmapIndirect(pBM);
SelectObject(hMemDC,hBM);

如果不行,可以通過什么方法實現?謝謝

8 个解决方案

#1


LZ的代碼可能成功,也可能失敗,有一個前提:CurrentBitmap結構體中bmBits指向像素數據的指針不能為空。一般通過CBitmap::GetBitmap得到的bmBits值是空的。所以上面的代碼會運行失敗。

需要經過一些附加代碼:
CBitmap map;
map.LoadBitmap(IDB_BITMAP1);

BITMAP CurrentBitmap;//結構已知
map.GetBitmap(&CurrentBitmap);
DWORD dwCount = CurrentBitmap.bmWidthBytes*CurrentBitmap.bmHeight;
BYTE* bits = new BYTE[dwCount];
map.GetBitmapBits(dwCount,bits);
CurrentBitmap.bmBits = bits;

使用完bits,別忘記delete []bits;

#2


謝謝了 
我想在兩個進程間通過文件映射的方式傳遞圖像信息,在另一個進程中可以顯示這個圖像,請問我該以什么格式傳輸圖像信息?因為對圖像編程不怎么了解,還請你多多指教。

#3


我怎么樣可以把這個圖像的bmBits指向的數據傳過去呢

#4



CBitmap bmp;
BITMAP CurrentBitmap;//結構已知 
CDC *pDC=GetDC();
CDC dc;
bmp.Attach(CurrentBitmap);

dc.CreateCompatibleDC(pDC);
dc.SelectObject(&bmp);
pDC->BitBlt(10,10,50,50,&dc,10,00,SRCCOPY);

dc.DeleteDC();
ReleaseDC(pDC);

#5


引用 4 樓 ghost90 的回復:
C/C++ code
CBitmap bmp;
BITMAP CurrentBitmap;//結構已知    CDC*pDC=GetDC();
    CDC dc;    
    bmp.Attach(CurrentBitmap);
    
    dc.CreateCompatibleDC(pDC);
    dc.SelectObject(&bmp);
    pDC->BitBlt(1¡­

 bmp.Attach(CurrentBitmap); 這句去掉改成
bmp.CreateBitmapIndirect(&CurrentBitmap);

#6


引用 3 樓 hustkknight 的回復:
我怎么樣可以把這個圖像的bmBits指向的數據傳過去呢

用內存映射,CreateFileMapping,相關資料和用法自己去Google下

#7


引用 2 樓 hustkknight 的回復:
謝謝了
 我想在兩個進程間通過文件映射的方式傳遞圖像信息,在另一個進程中可以顯示這個圖像,請問我該以什么格式傳輸圖像信息?因為對圖像編程不怎么了解,還請你多多指教。


BITMAP結構體中除像素指針外,是其它的寬、高,,,等描述信息,另外加上最后一塊LPVOID數據都需要傳過去。
所以內存映射文件的大小應該是:sizeof(BITMAP)-sizeof(LPVOID)+(CurrentBitmap.bmWidthBytes*CurrentBitmap.bmHeight)
即:BITMAP結構體中除像素指針外的其它數據+像素數據

具體怎么使用內存映射LZ可以自己查一下,也可以直接使用下面的類(很好用的):
http://blog.csdn.net/fengrx/archive/2009/04/13/4069088.aspx

#8


to fengrx:
學習了,也遇到同樣問題
但是“像素數據”該怎么樣傳遞呢?進程之間能不能直接傳遞指針呢?數據該怎么拷貝到指定的內存中呢?又怎么樣獲取呢?

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com