WPF:通过BitmapSource的CopyPixels和Create方法来切割图片

原文 WPF:通过BitmapSource的CopyPixels和Create方法来切割图片

 

BitmapSource是WPF图像的最基本类型,它同时提供两个像素相关的方法就是CopyPixels和Create方法。使用这两个方法可以切割图片中的一部分,类似另一个BitmapSource的子类:CroppedBitmap类型。

CopyPixels方法需要提前初始化数组,同时还可以指定一个矩形(Int32Rect类型)来表示所占区域的大小。计算好图像每行所占字节数(Stride参数)和偏移量(Offset参数,通常是0)就可以正确调用CopyPixels了。接着使用填充后的数组,调用Create方法,另一个被切割的部分图像对象就生成了。

 

切割矩形的值代表图像像素的位置,比如一个200*200像素的图像,我们要四分之一部分的右上角,那么矩形的定义就是:new Int32Rect(100, 0, 100, 100);

在界面上定义两个Image控件:img1和img2

<UniformGrid Rows="1">
<Image Name="img1"/>
<Image Name="img2"/>
</UniformGrid>

 

背后操作代码࿰

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用DrawingVisual和RenderTargetBitmap类来合成两个BitmapSource。 首先,创建两个BitmapSource对象,分别表示要合成的两张图片。然后,创建一个DrawingVisual对象,并在其中绘制这两张图片。最后,使用RenderTargetBitmap类将DrawingVisual对象渲染成一个新的BitmapSource对象,该对象即为合成后的图片。 以下是示例代码: ``` csharp // 创建两个BitmapSource对象 BitmapImage image1 = new BitmapImage(new Uri("path/to/image1.png")); BitmapImage image2 = new BitmapImage(new Uri("path/to/image2.png")); // 创建DrawingVisual对象并绘制图片 DrawingVisual visual = new DrawingVisual(); using (DrawingContext context = visual.RenderOpen()) { context.DrawImage(image1, new Rect(0, 0, image1.PixelWidth, image1.PixelHeight)); context.DrawImage(image2, new Rect(0, image1.PixelHeight, image2.PixelWidth, image2.PixelHeight)); } // 使用RenderTargetBitmap类将DrawingVisual对象渲染成新的BitmapSource对象 RenderTargetBitmap renderBitmap = new RenderTargetBitmap(image1.PixelWidth, image1.PixelHeight + image2.PixelHeight, image1.DpiX, image1.DpiY, PixelFormats.Default); renderBitmap.Render(visual); // 合成后的图片即为renderBitmap对象 ``` 注意,上述代码中合成后的图片大小为第一张图片的宽度和高度加上第二张图片的高度。如果第二张图片的宽度大于第一张图片的宽度,需要将RenderTargetBitmap对象的宽度设置为第二张图片的宽度。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值