如何使用SavePictureDialog ? |
答題得分者是:RaynorPao
|
wzchen
一般會員 發表:6 回覆:9 積分:3 註冊:2002-12-02 發送簡訊給我 |
|
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
引言: 各位前輩, 我的form上面有quickreport的元件 想利用image->canvas把form上面我要存的畫面存成圖檔 (會超出視窗範圍,沒辦法用抓screen的方式) 不知如何是好,還請各位先進指教^^wzchen 你好: 動態 create 一個 TBitmap 便可完成< > 請參考以下的做法< > void __fastcall TForm1::Button1Click(TObject *Sender) { Graphics::TBitmap *bmpBuf=new Graphics::TBitmap; bmpBuf->Width=Form1->ClientWidth; bmpBuf->Height=Form1->ClientHeight; bmpBuf->Canvas->CopyMode=cmSrcCopy; bmpBuf->Canvas->CopyRect(Rect(0, 0, bmpBuf->Width, bmpBuf->Height), Form1->Canvas, Rect(0, 0, Form1->ClientWidth, Form1->ClientHeight)); bmpBuf->SaveToFile("c:\\bmpBuf.bmp"); delete bmpBuf; }-- Enjoy Researching & Developing -- 發表人 - RaynorPao 於 2002/12/19 13:59:35
------
-- 若您已經得到滿意的答覆,請適時結案!! -- -- 欲知前世因,今生受者是;欲知來世果,今生做者是 -- -- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 -- |
wzchen
一般會員 發表:6 回覆:9 積分:3 註冊:2002-12-02 發送簡訊給我 |
[/quote] 動態 create 一個 TBitmap 便可完成< >
請參考以下的做法< >
void __fastcall TForm1::Button1Click(TObject *Sender) { Graphics::TBitmap *bmpBuf=new Graphics::TBitmap; bmpBuf->Width=Form1->ClientWidth; bmpBuf->Height=Form1->ClientHeight; bmpBuf->Canvas->CopyMode=cmSrcCopy; bmpBuf->Canvas->CopyRect(Rect(0, 0, bmpBuf->Width, bmpBuf->Height), Form1->Canvas, Rect(0, 0, Form1->ClientWidth, Form1->ClientHeight)); bmpBuf->SaveToFile("c:\\bmpBuf.bmp"); delete bmpBuf; }-- Enjoy Researching & Developing -- 發表人 - RaynorPao 於 2002/12/19 13:59:35 [/quote] RaynorPao, 謝謝你的方法, 然而超出form的範圍卻抓不到 我的螢幕解析度為800*600 我想抓的表格卻有816*1056 超過form的範圍了 可以教一下嗎, 謝謝^^ |
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
|
wzchen
一般會員 發表:6 回覆:9 積分:3 註冊:2002-12-02 發送簡訊給我 |
|
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
|
wzchen
一般會員 發表:6 回覆:9 積分:3 註冊:2002-12-02 發送簡訊給我 |
RaynorPao , 我後來有查了一下CANVAS的properties and methods
好像只有COPYRECT可以使用來把CANVAS框起來 我想說那用切割複製再拼起來好了
第一個區塊是沒有問題
然而我一設定HorzScrollBar->Position的位置
第二個區塊(在第一區塊的右邊)會發生重疊的問題
座標如下
shift=x2-x1
rect(x1,y1,x2,y2),rect(x1 shift,y1,x2 shift,y2)
這個區塊後面(最右邊)會重複到前面的圖像
可是第二區接續第一區的地方又很完整的接續到了
這是HorzScrollBar的關係嗎 我也試過垂直的shift 也會發生同樣的事情
|
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
引言: RaynorPao , 我後來有查了一下CANVAS的properties and methods 好像只有COPYRECT可以使用來把CANVAS框起來 我想說那用切割複製再拼起來好了 第一個區塊是沒有問題 然而我一設定HorzScrollBar->Position的位置 第二個區塊(在第一區塊的右邊)會發生重疊的問題 座標如下 shift=x2-x1 rect(x1,y1,x2,y2),rect(x1 shift,y1,x2 shift,y2) 這個區塊後面(最右邊)會重複到前面的圖像 可是第二區接續第一區的地方又很完整的接續到了 這是HorzScrollBar的關係嗎 我也試過垂直的shift 也會發生同樣的事情wzchen 你好: 假設你的 Form1 的 ClientWidth 及 Client Height 分別為 (800, 800) (而你要截取的圖形貼滿了這個範圍) 如果分 4 次截取的話~~應該是像這樣吧(你自己要試試看) < class="code"> Graphics::TBitmap *bmpBuf=new Graphics::TBitmap; bmpBuf->Width=800; bmpBuf->Height=800; bmpBuf->Canvas->CopyMode=cmSrcCopy; bmpBuf->Canvas->CopyRect(Rect(0, 0, 400, 400), Form1->Canvas, Rect(0, 0, 400, 400)); bmpBuf->Canvas->CopyRect(Rect(401, 0, 800, 400), Form1->Canvas, Rect(401, 0, 800, 400)); bmpBuf->Canvas->CopyRect(Rect(0, 401, 400, 800), Form1->Canvas, Rect(0, 401, 400, 800)); bmpBuf->Canvas->CopyRect(Rect(401, 401, 800, 800), Form1->Canvas, Rect(401, 401, 800, 800)); bmpBuf->SaveToFile("c:\\bmpBuf.bmp"); delete bmpBuf; 備註: 以上的 sample code 我並沒有實際 compile 及 run 過 麻煩你自己驗證一下吧 --
------
-- 若您已經得到滿意的答覆,請適時結案!! -- -- 欲知前世因,今生受者是;欲知來世果,今生做者是 -- -- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 -- |
wzchen
一般會員 發表:6 回覆:9 積分:3 註冊:2002-12-02 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |