線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1377
推到 Plurk!
推到 Facebook!

GDI畫圖

尚未結案
asd98537
一般會員


發表:27
回覆:25
積分:10
註冊:2002-10-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-05-18 18:16:36 IP:163.25.xxx.xxx 未訂閱
為了加快繪圖的速度 所以建立了memory dc 以c++ builder為例,在TImage上畫圖    HDC hDC , hMemDC; HBITMAP hBitmap,hOldBitmap;    /* 建立Memory DC */  hMemDC = CreateCompatibleDC(Image1->Canvas->Handle); hBitmap = CreateCompatibleBitmap(Image1->Picture->Bitmap->Handle,Image1->Width,Image1->Height);  hOldBitmap = (HBITMAP) SelectObject(hMemDC,hBitmap);    /*設定映射模式*/ SetMapMode(hMemDC ,MM_ANISOTROPIC ); SetWindowExtEx(hDC ,wb.getNumSamples() ,32767,NULL); //我想畫wave波形,wb.getNumSample()代表有幾點 SetViewportExtEx(hDC ,Image1->Width,-Image1->Height,NULL); SetViewportOrgEx(hDC ,0,Image1->Height/2,NULL);    /*開始畫圖*/ for(int i=0;iCanvas->Handle,0,0, Image1->Width,Image1->Height, hMemDC,0,0, SRCCOPY); 問題1:請問建立一個memory DC時是要給Image1->Canvas->Handle,還是要給Image1->Picture->Bitmap->Canvas->Handle 問題2:若上面的code無誤的話,為什麼設定SetMapMode後,就畫不出圖形來? 使用Memroy DC有何限制條件? 上面的code畫不出圖來,所以就改用Graphics::TBitmap Buf取代memory dc,畫完圖後再 Image1->Picture->Bitmap->Assign(Buf); Image1->Refresh(); 這樣就ok,不過還是想知道上面的code出現什麼問題,要怎麼修改 謝謝大家!
asd98537
一般會員


發表:27
回覆:25
積分:10
註冊:2002-10-23

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-05-19 02:26:48 IP:163.25.xxx.xxx 未訂閱
找出原因了 hBitmap = CreateCompatibleBitmap(Image1->Picture->Bitmap->Handle,Image1->Width,Image1->Height); 這個步驟出錯了,很奇怪的是,要透過Win32 API建立Image1的Bitmap複本都失敗 要改成 hOldBitmap = (HBITMAP) SelectObject(hMemDC,Image1->Picture->Bitmap->Handle); 反而要直接當作SelectObject的第二個參數
anpino
版主


發表:31
回覆:477
積分:231
註冊:2003-01-02

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-05-06 16:21:11 IP:211.23.xxx.xxx 未訂閱
請結案。 ------------------------------- 數學系是內功很強(邏輯/分析) 資工系是招式很多(程式技巧) 就像令狐沖VS東方不敗:D -------------------------------
系統時間:2024-04-26 18:49:57
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!