DIBSection |
缺席
|
dhliu
一般會員 發表:18 回覆:24 積分:8 註冊:2003-03-05 發送簡訊給我 |
請問各位, 我設定了 DIBSection 之後, 把圖形填入記憶體, 但是顯示在螢幕上的圖形, 長寬比例不對, 而且整個圖形又向右邊複製好幾份, 請問我是那個地方做錯了呢? 另一個問題, 是否能教我 BITMAPV4HEAD 或者 BITMAPV5HEAD 的設定呢?
================================================================
這是原圖
這是執行結果
// DIBSection 的設定 bool CDIBSection::Create(HWND hWnd, HDC hDC, int cx, int cy) { m_hWnd = hWnd; m_hDC = ::CreateCompatibleDC(hDC); m_hTargetDC = hDC; m_Size.cx = cx; m_Size.cy = cy; if((m_Size.cx & 1) != 0) m_Size.cx++; if((m_Size.cy & 1) != 0) m_Size.cy++; m_BitmapInfo.m_Header.biSize = sizeof(BITMAPINFOHEADER); m_BitmapInfo.m_Header.biWidth = m_Size.cx; m_BitmapInfo.m_Header.biHeight = -m_Size.cy; m_BitmapInfo.m_Header.biPlanes = 1; m_BitmapInfo.m_Header.biBitCount = 32; m_BitmapInfo.m_Header.biCompression = BI_BITFIELDS; m_BitmapInfo.m_Header.biSizeImage = m_Size.cx*m_Size.cy; m_BitmapInfo.m_Header.biXPelsPerMeter = 1; m_BitmapInfo.m_Header.biYPelsPerMeter = 1; m_BitmapInfo.m_Header.biClrUsed = 0; m_BitmapInfo.m_Header.biClrImportant = 0; m_BitmapInfo.m_dwColorMask[0] = 0xff; m_BitmapInfo.m_dwColorMask[1] = 0xff00; m_BitmapInfo.m_dwColorMask[2] = 0xff0000; m_hBitmap = ::CreateDIBSection(m_hDC, (BITMAPINFO *)&m_BitmapInfo, DIB_RGB_COLORS, (void **)&m_mpPixel, NULL, 0); ::SelectObject(m_hDC, m_hBitmap); if(!m_hBitmap) return(false); m_IsAvailable = true; return(true); } // 填影像片段 void CDIBSection::PutImage(DWORD *Pixel,int ColorMode) { unsigned long cnt1,cnt; int i; DWORD Col; i = m_Size.cx*m_Size.cy; Col = 0; for(cnt1=0, cnt=0; cnt < i; cnt1++,cnt+=3) { if(ColorMode & Color_B) Col = (BYTE)Pixel[cnt]; Col <<= 0x8; if(ColorMode & Color_G) Col |= (BYTE)Pixel[cnt+1]; Col <<= 0x8; if(ColorMode & Color_R) Col |= (BYTE)Pixel[cnt+2]; m_mpPixel[cnt1] = Col; } } // 程式執行部分 void __fastcall TForm1::Button1Click(TObject *Sender) { int ReadHandle,WriteHandle; int FileLen; int i; AnsiString FileName; DWORD *Buffer; int BmpOffset; DWORD BmpHeight,BmpWidth; if(Edit1->Text != "") { FileName = "E:\\" + Edit1->Text + ".bmp"; ReadHandle = FileOpen(FileName,fmOpenRead); FileLen = FileSeek(ReadHandle,0,2); i = FileSeek(ReadHandle,0x0a,0); FileRead(ReadHandle, &BmpOffset, 1); i = FileSeek(ReadHandle,0x12,0); FileRead(ReadHandle, &BmpWidth, 4); FileRead(ReadHandle, &BmpHeight, 4); i = FileSeek(ReadHandle,BmpOffset,0); Buffer = new DWORD[BmpWidth*BmpHeight]; i = FileRead (ReadHandle, Buffer, FileLen-BmpOffset); hdc = GetDC(Form1->Handle); if(!Test->Create(Form1->Handle,hdc,BmpWidth,BmpHeight)) FormClose(this,NULL); Test->BeginDraw(hdc); Test->PutImage((DWORD *)Buffer, Color_R|Color_G|Color_B); Test->EndDraw(); FileClose(ReadHandle); delete Buffer; } } |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |