none
畫圖觀念 RRS feed

  • 問題

  • 大大您們好,我想請問一下觀念問題,這是某一類別上的方法,我有兩張畫布,利用另外一個類別,我在上面畫了不同的圈圈顏色(藍色和紅色),可是一張畫完(藍色)我將它儲存起來,再清除畫布(黑體),畫另一張(紅色),但結果卻只有看到紅色的圖,可是我不是有用一個矩陣先將它儲存起來嗎,有些參數將他拿掉,簡化程式碼,謝謝

            DrawDataCenter MyDrawDC = new DrawDataCenter();      

            public Bitmap[] aa()
            {
                Bitmap[] ComBmp = new Bitmap[2];
                for (int i = 0; i < 2; i++)
                    ComBmp[i] = new Bitmap(20, 20);
                MyDrawDC.Load_g(15, 15);
                MyDrawDC.Clear();
                MyDrawDC.brush = new SolidBrush(Color.Blue) ;
                MyDrawDC.DrawCircule();
                ComBmp[0] = MyDrawDC.map;
                MyDrawDC.Clear();
                MyDrawDC.brush = new SolidBrush(Color.Red);
                MyDrawDC.DrawCircule();
                ComBmp[1] = MyDrawDC.map;
                return ComBmp;
            }

        class DrawDataCenter
        {

            public Bitmap map;
            public Graphics g;   

            public Brush brush;

            public void Load_g(int width, int height)
            {
                map = new Bitmap(width, height);
                g = Graphics.FromImage(map);
            }

            public void DrawCircule()
            {

                 //draw circle
             }       

             public void Clear()
            {
                g.Clear(Color.White);
            }
        }

    2010年3月19日 上午 05:28

解答

  •  
        g = Graphics.FromImage(map);
    
    
        Point ulCorner = new Point(0, 0);
    
        g.Clear(Color.Red);
    
        g.DrawImage( ComBmp[0] , ulCorner);
    
          g.Clear(Color.White);
    
    
        g.DrawImage( ComBmp[1] , ulCorner);



    Cmf.Net (C) 2010
    • 已標示為解答 冰糖旋風 2010年3月23日 上午 03:42
    2010年3月19日 上午 05:46
  • Hi,

    您的程式g = Graphics.FromImage(map)

    這邊是建立畫布

    但是你這邊只有Load_g一次

    也就是說只有一張畫布

    清除與畫的動作都在同一張畫布上

    雖然你有用陣列存起來

    但是Bitmap是參考型別

    等於你存的全部都是指向同一個物件的參考

    所以只會有最後的圖形


    謙卑學習,持之以恆,才能不斷的Level Up http://www.dotblogs.com.tw/larrynung/
    • 已標示為解答 冰糖旋風 2010年3月23日 上午 03:41
    2010年3月19日 下午 04:00

所有回覆

  •  
        g = Graphics.FromImage(map);
    
    
        Point ulCorner = new Point(0, 0);
    
        g.Clear(Color.Red);
    
        g.DrawImage( ComBmp[0] , ulCorner);
    
          g.Clear(Color.White);
    
    
        g.DrawImage( ComBmp[1] , ulCorner);



    Cmf.Net (C) 2010
    • 已標示為解答 冰糖旋風 2010年3月23日 上午 03:42
    2010年3月19日 上午 05:46
  • 既然是自訂類別 DrawDataCenter 內部的方法使用問題,你就應該去問開發者,又不是大家都有這個類別,誰知道這個類別內部怎樣搞?
    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2010年3月19日 下午 03:14
  • Hi,

    您的程式g = Graphics.FromImage(map)

    這邊是建立畫布

    但是你這邊只有Load_g一次

    也就是說只有一張畫布

    清除與畫的動作都在同一張畫布上

    雖然你有用陣列存起來

    但是Bitmap是參考型別

    等於你存的全部都是指向同一個物件的參考

    所以只會有最後的圖形


    謙卑學習,持之以恆,才能不斷的Level Up http://www.dotblogs.com.tw/larrynung/
    • 已標示為解答 冰糖旋風 2010年3月23日 上午 03:41
    2010年3月19日 下午 04:00
  • 謝謝大大
    2010年3月23日 上午 03:41