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

JAVA 重新抓圖的問題

尚未結案
inse
一般會員


發表:5
回覆:2
積分:1
註冊:2004-06-30

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-07-04 15:38:18 IP:210.68.xxx.xxx 未訂閱
各位大大好    我想利用,java 寫一個applet,會定時去讀取主機上的某個圖檔(jpg),來作成簡易 webcam 的樣子。    不過,老實說 我碰JAVA是3-4年前的事了,有些地方跟現在似乎有點不太一樣    我摸索的以前自己的程式寫了一個簡單的APPLET ,他會輪流去讀取兩個圖檔,並透過雙重緩衝區貼出來,以減少畫面重繪的影響。    但是 這個APPLET 似乎只會讀第一次圖檔,之後我換圖片、或乾脆把圖檔殺了 他也沒有任何改變,下面是我的原始擋,還請指教     
mport java.awt.*;
import java.applet.*;    public class HelloWorld extends Applet implements Runnable
{
        int x,x1;
        Graphics DrawBackScreen; // 繪製次畫面的 Graphics 實體
        Image    BackScreen; // 次畫面
        Thread   DrawThread; // 使用執行緒繪製畫面            public void init()
        {
                x = 0;
                x1 = 5;
                BackScreen = createImage(320,240); // 建立次畫面
                DrawBackScreen = BackScreen.getGraphics(); // 取得次畫面的繪製類別
                DrawThread = new Thread(this);
        }
        public void start()
        {
                DrawThread.start();
        }
        public void run()
        {
                while( DrawThread != null )
                {
                        try
                        {
                                        Thread.sleep(100);
                        } // 延遲 30ms大約FPS可到30左右                            catch(InterruptedException e){}
                        Image image=GetCpatureImage();
                        if (image!=null)
                        {
                                DrawBackScreen.drawImage(image,0,0,this);
                                repaint();
                        }                        
                }
        }
        public void stop()
        {
                DrawThread = null;
        }
        
        public Image GetCpatureImage()
        {
                Image img;
                img=getImage(getCodeBase(),"capture.jpg");
                        switch (x)
                        {
                                case 0:
                                        x=1;
                                        img=getImage(getCodeBase(),"capture00.jpg");
                                        break;
                                case 1:
                
                                        x=0;
                                        img=getImage(getCodeBase(),"capture01.jpg");
                                        break;
                                default:
                                        img=null;
                                        x=0;
                                        break;
                        }
                
                return img;
        }            public void update(Graphics g)
        {
                paint(g);
        }
        
        public void paint(Graphics g)
        {
                // 將次畫面貼到主畫面
                g.drawImage(BackScreen,0,0,this);
        }
}
 
發表人 - inse 於 2005/07/04 16:56:55
kenon0425
一般會員


發表:5
回覆:8
積分:2
註冊:2004-04-11

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-07-04 18:41:42 IP:61.221.xxx.xxx 未訂閱
你好: 我有收到你的來信了,也看過你的程式了 我想你只要在你要更新緩衝之前加入Image.flush()應該就可以解決你的問題了 上面的Image是你getImage讀入的容器喔(在你的程式裡應該是img或image吧) (好啦!我承認沒很仔細看你的程式) 對了!提醒你一個觀念 在
系統時間:2024-05-03 20:04:51
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!