看板 C_and_CPP 關於我們 聯絡資訊
開發平台(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
hichcock:沒看到 CDC 阿, 直接改記憶體內容不行?? 01/07 12:02