推 hichcock:沒看到 CDC 阿, 直接改記憶體內容不行?? 01/07 12:02
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
VC6 MFC
問題(Question):
我有一塊記憶體,是從某張bmp擷取出來的影像資料(也就是raw),
想要在上面畫一些東西後另存一張bmp。
由於我只會使用CDC畫圖,
現在卡在不知如何將繪圖之後的CDC抓出raw。
程式碼(Code):(請善用置底文網頁, 記得排版)
int numquad=0;
BITMAPINFO* pbi;
BYTE* lpbuf;
RGBQUAD* quad;
BITMAPFILEHEADER bf;
BITMAPINFOHEADER bi;
CFile file;
file.Open(strPath_Open,CFile::modeRead|CFile::shareDenyNone,NULL);
file.Read(&bf, sizeof(bf));
file.Read(&bi, sizeof(bi));
if (bi.biBitCount<24)
numquad=1<<bi.biBitCount;
pbi=(BITMAPINFO*)HeapAlloc(GetProcessHeap(), 0,
sizeof(BITMAPINFOHEADER) + numquad*sizeof(RGBQUAD));
memcpy(pbi, &bi, sizeof(BITMAPINFOHEADER));
quad=(RGBQUAD*)((BYTE*)pbi+sizeof(BITMAPINFOHEADER));
if (numquad!=0)
file.Read(quad, sizeof(RGBQUAD)*numquad);
bi.biSizeImage = bf.bfSize - bf.bfOffBits;
lpbuf = (BYTE*)HeapAlloc(GetProcessHeap(), 0, bi.biSizeImage);
file.Read(lpbuf, bi.biSizeImage);
file.Close();
/////////////////////
中間想在這塊lpbuf上畫圖.
/////////////////////
file.Open(strPath_Save,CFile::modeCreate|CFile::modeReadWrite, NULL);
file.SeekToBegin();
file.Write(&bf, sizeof(bf));
file.Write(&bi, sizeof(bi));
if (numquad!=0)
file.Write(quad, sizeof(RGBQUAD)*numquad);
file.WriteHuge(lpbuf, bi.biSizeImage);
file.Close();
謝謝~
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.34.227.117