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

關於存圖檔的問題

尚未結案
tbscsh
一般會員


發表:7
回覆:1
積分:1
註冊:2004-03-10

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-06-01 14:15:52 IP:61.229.xxx.xxx 未訂閱
大家好,小弟有個問題想要請要一下: 為了可以在Panel上進行OpenGL繪圖(不想直接畫在Form上), 並且需要有Canvas屬性(想要能夠存成圖檔), 我依照"BC++ Builder程式設計",山風工作室著, 第一章的範例,寫了一個元件Tpanel1,繼承Tpanel, 多了一property Canvas,於是就可以繪圖並且存圖檔. 目前存圖檔的做法是以Canvas的CopyRect方法作:    
 
        Graphics::TBitmap* bitmap = new Graphics::TBitmap();
        bitmap->PixelFormat = pf24bit;
        bitmap->Height = Panel11->Height;
        bitmap->Width = Panel11->Width;
        bitmap->Canvas->CopyRect(Panel11->Canvas->ClipRect,Panel11->Canvas,Panel11->Canvas->ClipRect);
        bitmap->SaveToFile(filename);
程式是Render出一連串的影像(依照時間順序讀入相對應的資料檔,並繪出其圖形), 所以提供了save images when play的功能,讓我們可以在play的時候順便存圖檔. 現在問題來了,用此方法當play時,若我們將視窗縮小,則會發生抓不到圖檔的問題, 於是就想到直接複製Canvas裡面的Pixels:
        for(int i = 0 ; iWidth ;   i)
        {
                for(int j=0 ; jHeight ;   j)
                {
                        bitmap->Canvas->Pixels[i][j] = Panel11->Canvas->Pixels[i][j];
                }
        }
但是用此方法很慢,連單存一張圖都要很久,:( 不知道您有什麼看法,還請您幫忙,謝謝:)
richtop
資深會員


發表:122
回覆:646
積分:468
註冊:2003-06-10

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-06-20 22:55:40 IP:211.76.xxx.xxx 未訂閱
tbscsh您好:    Canvas上的東西僅是暫時顯示您繪出的結果,一旦有其他視窗或將原視窗縮小時,因所繪的內容不在視窗重繪的函式中,所以就會消失了! 建議您在Panel上放置一個Image元件,並利用Image的Canvas屬性來繪出結果,因為Image會自己維護與重繪其上所顯示的內容,所以或許能解決您的問題。 但是速度上能否達到您的需求,就請您自己試試吧!
系統時間:2024-05-21 5:28:57
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!