2017-03-03 44 views
0

我不知道我是否在问正确的问题;所以提前道歉。我正在将一些PNG写入画布,我也想同时将PNG复制到位图。我希望PNG出现在位图上与在画布上相同的位置上。如何将图像转换为ImageSource

这是代码片段:

WorkingBMP = new RenderTargetBitmap(BOARD_WIDTH, BOARD_HEIGHT, 96, 96, PixelFormats.Pbgra32); 

TreeFile = "pack://application:,,,/Images/" + TreeFile; 

var image = new Image 
{ 
    Source = new BitmapImage(new Uri(TreeFile)) 
}; 
image.Width = 10; 
image.Height = 10; 

Canvas.SetLeft(image, x); 
Canvas.SetTop(image, y); 

DrawingVisual drawingVisual = new DrawingVisual(); 
DrawingContext drawingContext = drawingVisual.RenderOpen(); 
drawingContext.DrawImage(image, new Rect(x, y, image.Width, image.Height)); 
drawingContext.Close(); 

WorkingBMP.Render(drawingVisual); 

MainCanvas.Children.Add(image); 

然而,它抛出错误“无法从‘System.Windows.Controls.Image’对这一行‘System.Windows.Media.ImageSource’转换:

drawingContext.DrawImage(image, 
        new Rect(x, y, image.Width, image.Height)); 

请问,如果我能以某种方式转换图像到一个ImageSource的还是我这一切错这个错误得到解决?

谢谢!

+1

在上面的代码,您_create_ a ['BitmapImage'](https://msdn.microsoft.com/en-us/library/system.windows.media.imaging.bitmapimage(v = vs.110).aspx)object,wh ich是一个'ImageSource'(标准的OOP/Liskov替换/等等)。你为什么不使用这个对象?你为什么试图将WPF UI元素转换为不是? –

回答

1

如果BitmapImage的直接绘制,它应该工作

var source = new BitmapImage(new Uri(TreeFile)) 

drawingContext.DrawImage(source, 
        new Rect(x, y, image.Width, image.Height)); 
+0

谢谢!非常感激! – zetar

0

Image是窗口上的控件。 Image.Source是实际位图Image检索以进行呈现。它可能并不明显,但您的代码对此有点暗示,因为您将Source设置为BitmapImage

您需要使用source属性才能获得实例化的实际BitmapImage

您可能需要转换,但这应该工作:

drawingContext.DrawImage(image.Source, 
        new Rect(x, y, image.Width, image.Height)); 
+0

感谢您解释这一点! – zetar

-1

这里试试这个

WorkingBMP = new RenderTargetBitmap(BOARD_WIDTH, BOARD_HEIGHT, 96, 96, PixelFormats.Pbgra32); 

TreeFile = "pack://application:,,,/Images/" + TreeFile; 

var image = new Image 
{ 
    Source = new BitmapImage(new Uri(TreeFile)) 
}; 
image.Width = 10; 
image.Height = 10; 

Canvas.SetLeft(image, x); 
Canvas.SetTop(image, y); 

DrawingVisual drawingVisual = new DrawingVisual(); 
DrawingContext drawingContext = drawingVisual.RenderOpen(); 
drawingContext.DrawImage(new BitmapImage(new Uri(TreeFile)), new Rect(x, y, image.Width, image.Height)); 
drawingContext.Close(); 

WorkingBMP.Render(drawingVisual); 

MainCanvas.Children.Add(image); 
+0

谢谢!似乎工作! – zetar