Avalonia 使用 Bitmap.CopyPixels() 进行裁剪,实现图片裁剪效果
Avalonia 使用 Bitmap.CopyPixels() 进行裁剪,实现图片裁剪效果
第一节是效果演示,查看第二节的核心代码部分快速体验吧!
一、效果
示例图片呈现的是原图片和居中裁剪后的效果,你可以观察到在图片中间有一个人为画着的一团黑圈,说明我们确实裁剪到了我们指定的中心点。

我们在图片上做了一个标记,画在了图片比较中心的位置,示例代码提供的是一个居中的效果,示例代码如下:
var sourceFile = "xxxxxxxxxxxxxxxxx";
var sourceBitmap = new Bitmap(sourceFile);
// 居中裁剪
var originWidth = sourceBitmap.PixelSize.Width;
var originHeight = sourceBitmap.PixelSize.Height;
var cropWidth = 100;
var cropHeight = 100;
var pixelRect = new PixelRect(originWidth / 2 - cropWidth / 2, originHeight / 2 - cropHeight / 2, cropWidth, cropHeight);
var croppedBitmap = GetCropBitmap(sourceBitmap, pixelRect);
PART_OriginImage.Source = sourceBitmap;
PART_CropImage.Source = croppedBitmap;
二、核心代码
sourceBitmap 表示的是图片来源、cropRect 指定了你要向 sourceBitmap 裁剪的区域。
public static WriteableBitmap GetCropBitmap(Bitmap sourceBitmap, PixelRect cropRect)
{
var croppedBitmap = new WriteableBitmap(cropRect.Size, sourceBitmap.Dpi, sourceBitmap.Format, sourceBitmap.AlphaFormat);
using (var fb = croppedBitmap.Lock())
{
sourceBitmap.CopyPixels((PixelRect)cropRect, fb.Address, (int)(fb.RowBytes * cropRect.Height), fb.RowBytes);
}
return croppedBitmap;
}

浙公网安备 33010602011771号