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;
}
posted @ 2025-04-15 09:26  fanbal  阅读(228)  评论(0)    收藏  举报