【问题标题】:Placing Bitmap in Canvas in C# [duplicate]在C#中将位图放置在画布中[重复]
【发布时间】:2012-10-12 20:39:37
【问题描述】:

可能重复:
How to render bitmap into canvas in WPF?

我想要的很简单。我想在 C# 中将 BitmapImage 放入 Canvas 中。我的应用程序基于 WPF。我搜索了这个,我发现了类似的问题,但我找不到我要找的东西。

简而言之,我有这个:

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

我想把它放在画布上,平均值并不重要,它可以是一个矩形或其他任何东西。

【问题讨论】:

  • @mbeckish 那一个是无关紧要的,我想。只添加一个位图图像不应该那么复杂,这家伙建议扩展画布类。我正在寻找一个更简单的解决方案,因为我正在编写一个已经编写好的代码并且我不想做出巨大的改变。
  • @rooter 这个问题还有另一个答案,它将位图设置为画布的背景。
  • @rooter - 请为您的问题添加更多细节,这样我们就不必猜测您会接受或不接受什么。
  • @Adriano 那个也行不通,因为我想把它放在特定区域,而不是作为背景图片。
  • 添加另一个画布,把这个放在你喜欢的画布上,然后使用位图作为背景

标签: c# canvas


【解决方案1】:

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;

现在您可以将Image 控件放在Canvas 中所需的位置。

【讨论】:

  • 似乎派生是唯一的解决方案。谢谢。
  • @rooter 不,不是。如果您有很多 Image 控件(具有相同的图像),您可以考虑派生以节省一点内存,但您始终可以使用 Image 控件。
猜你喜欢
  • 2010-11-10
  • 1970-01-01
  • 2017-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-12
  • 2017-09-28
  • 2018-08-21
相关资源
最近更新 更多