全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:810
推到 Plurk!
推到 Facebook!

DIBSection

缺席
dhliu
一般會員


發表:18
回覆:24
積分:8
註冊:2003-03-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-04-28 21:25:17 IP:211.76.xxx.xxx 未訂閱
請問各位, 我設定了 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;
    }
}
系統時間:2024-05-14 2:19:28
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!