2012-10-12 19 views
3

可能重複:
How to render bitmap into canvas in WPF?配售位圖的畫布在C#

我要的是簡單的。我想將一個BitmapImage放入C#中的Canvas。我的應用基於WPF。我搜索了這個,我發現了類似的問題,但我找不到我在找什麼。

總之,我有這樣的:

BitmapImage img = new BitmapImage(new Uri("c:\\xyz.jpg")); 

我想把這在畫布上,平均值不那麼重要,它可以是一個矩形或什麼的。

+0

@mbeckish一個是無關緊要的,我想。添加一個位圖圖像不應該那麼複雜,該傢伙建議擴展畫布類。我正在尋找一個更簡單的解決方案,因爲我正在編寫一個已經編寫的代碼,我不想做出巨大的改變。 – rooter

+0

@rooter對於該問題還有另一個答案,它將該位圖設置爲Canvas的背景。 –

+0

@rooter - 請爲您的問題添加更多細節,以便我們不必猜測您會或不會接受的內容。 – mbeckish

回答

1

A BitmapImage對象不能位於Canvas之內,因爲它不是控件。你可以做的是從Canvas派生你自己的類,並覆蓋OnRender()方法來繪製你的位圖。基本上是這樣的:

class CanvasWithBitmap : Canvas 
{ 
    public CanvasWithBitmap() 
    { 
     _image = new BitmapImage(new Uri(@"c:\xyz.jpg")); 
    } 

    protected override void OnRender(DrawingContext dc) 
    { 
     dc.DrawImage(_image, 
      new Rect(0, 0, _image.PixelWidth, _image.PixelHeight)); 
    } 

    private BitmapImage _image; 
} 

當然,你可能需要公開的文件路徑,並通過性能Canvas內座標。如果你不想聲明自己的類只是繪製一個位圖,那麼你不能直接使用BitmapImage類。顯示圖像的控制是Image,讓我們試試這個:

BitmapImage bitmap = new BitmapImage(); 
bitmap.BeginInit(); 
bitmap.UriSource = new Uri(@"c:\xyz.jpg"); 
bitmap.EndInit(); 

Image image = new Image(); 
image.Source = bitmap; 

現在你可以把你想要的CanvasImage控制。

+0

似乎派生是唯一的解決方案。謝謝。 – rooter

+1

@rooter不,不是。如果您有很多Image控件(使用相同的圖像),您可能會考慮推導出保存少量內存,但始終可以使用Image控件。 –