[分享] DIB 描繪程式要點與測試程式

看板Programming作者時間17年前 (2007/01/29 10:01), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
完整文章鏈結: http://shukaiyang.myweb.hinet.net/dibtips/indextc.htm * 若欲擷取 bottom-up 的 DIB 像素資料,則傳入 GetDIBits( ) 的 header 之 biHeight 數值為正數,否則若欲擷取 top-down 的 DIB 像素資料,則 header 之 biHeight 數值為負數。   * 在 GetDIBits( ) 的 lpvBits 參數傳入 NULL 以擷取 DIB 的尺寸資訊的時候, 必須將 header 的 biSize 設為 sizeof(BITMPAINFOHEADER),並將 biBitBount 設為零,否則若 hbmp 指向一個 256 色之點陣圖,傳回的資料會帶有 color table 而造成記憶體寫入溢位。   * 使用GetDIBits( )擷取 DIB 像素資料的時候,header 的 biXPelsPerMeter, biYPelsPerMeter, biClrUsed, biClrImportant 欄位未用到,均填入零即可。 若將 header 用於儲存 .bmp 檔案,通常 PelsPerMeter 數值可採用 120。   * 採用兩階段的 GetDIBits( ) 呼叫來擷取 DIB 的尺寸和像素資料的時候,在第 一次的呼叫過後,header 中的 biCompression 可能會被改寫為非零值(因點陣 圖檔案或資源為RLE或其他壓縮),若以同一個 header 作第二次的 GetDIBits() 呼叫,可能會因此而失敗,故程式員必須在第一次 GetDIBits( ) 呼叫過後確實 地將 header 中的 biCompression 寫為零(BI_RGB),以取得不壓縮的 DIB 編碼 資料。   * 以 biBitCount=16、biCompression=0 的 header 執行 GetDIBits( ) 呼叫所取 得的 DIB 像素資料乃是 r-g-b 為 5-5-5 的格式(最高位元無作用),若欲取得 5-6-5 的資料則 biCompression 必須為 BI_BITFIELDS,且在 header 資料之 後立即跟隨三個 DWORD 數值以指明 r-g-b 位元的 color mask,以 5-6-5 格式 來說分別是 0xF800, 0x07E0, 0x001F。   * 無論 DIB 資料為 bottom-up 或 top-down,SetDIBitsToDevice( ) 與 StretchDIBits( ) 當中 (XSrc, YSrc) 均是以 DIB 左下角為原點的 lower-left 座標(MSDN文件有誤)。   * 若 StretchDIBits( ) 想要達到 anti-aliasing 效果,可使用 SetStretchBltMode(hDC, HALFTONE)。 -- Shu-Kai Yang's Freeware and Programming Tutorials: * 3D Graphics, Game, Multimedia Goodies at * http://shukaiyang.myweb.hinet.net/indextc.htm -- ※ 來源:‧四百年來第一站 firebird.cs.ccu.edu.tw‧[FROM: 122-124-100-138]
文章代碼(AID): #15lLLb00 (Programming)