Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C语言中在画布中放置位图#_C#_Canvas - Fatal编程技术网

C# 在C语言中在画布中放置位图#

C# 在C语言中在画布中放置位图#,c#,canvas,C#,Canvas,可能重复: 我想要的很简单。我想将位图图像放入C#中的画布。我的应用程序基于WPF。我搜索了这个,我发现了类似的问题,但我找不到我要找的 简言之,我有以下几点: BitmapImage img = new BitmapImage(new Uri("c:\\xyz.jpg")); 我想把它放在画布上,平均值没有那么重要,它可以是一个矩形或任何东西。一个位图图像对象不能放在画布内,因为它不是控件。您可以做的是从Canvas派生您自己的类,并重写OnRender()方法来绘制位图。基本上是这样的:

可能重复:

我想要的很简单。我想将
位图图像
放入C#中的
画布
。我的应用程序基于WPF。我搜索了这个,我发现了类似的问题,但我找不到我要找的

简言之,我有以下几点:

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

我想把它放在画布上,平均值没有那么重要,它可以是一个矩形或任何东西。

一个
位图图像
对象不能放在
画布
内,因为它不是控件。您可以做的是从
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;
}
当然,您可能需要通过属性公开
画布中的文件路径和坐标。如果您不想仅为了绘制位图而声明自己的类,则不能直接使用
BitmapImage
类。显示图像的控件是
Image
,让我们尝试以下操作:

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

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

现在你可以把
图像
控件放在
画布

@mbeckish中你想要的地方,我认为这是不相关的。只添加位图图像应该不会那么复杂,他建议扩展canvas类。我正在寻找一个更简单的解决方案,因为我正在编写一个已经编写好的代码,我不想做巨大的更改。@rooter这个问题还有另一个答案,它将位图设置为画布的背景。@rooter-请为您的问题添加更多细节,这样我们就不必猜测您会接受或不会接受的内容。@Adriano该选项也不起作用,因为我想将其放置在特定区域,但不是背景图片。添加另一个画布,把这张图片放在画布上你喜欢的地方,然后用位图作为背景。看起来衍生是唯一的解决方案。谢谢。@rooter不,不是。如果您有许多图像控件(具有相同的图像),您可以考虑导出以节省少量内存,但您可以始终使用图像控件。