0

我什至不知道我是否问对了问题;所以提前道歉。我正在将一些 PNG 写入画布,并且我还想同时将这些 PNG 复制到位图。我希望 PNG 出现在位图上与画布上相同的位置。

这是代码片段:

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,这个错误会得到解决吗?或者我做错了?

谢谢!

4

3 回答 3

1

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

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

drawingContext.DrawImage(source,
                  new Rect(x, y, image.Width, image.Height));
于 2017-03-03T16:21:42.763 回答
0

Image是窗口上的控件。Image.Source是实际的位图Image检索呈现。这可能并不明显,但您的代码确实暗示了这一点,因为您正在设置Source您的BitmapImage.

您需要使用 source 属性来BitmapImage实例化您的实际情况。

您可能需要强制转换,但这应该有效:

drawingContext.DrawImage(image.Source,
                  new Rect(x, y, image.Width, image.Height));
于 2017-03-03T16:20:52.353 回答
-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);
于 2017-03-03T16:28:27.770 回答