您可以使用CroppedBitmap
来创建一个新的位图,其中包含原始位图中的感兴趣区域。然后,您可以使用CopyPixels
方法将感兴趣的区域复制到一个新的数组中。
下面是一个示例代码:
using System;
using System.IO;
using System.Windows;
using System.Windows.Media;
using System.Windows.Media.Imaging;
namespace WpfApp
{
class Program
{
static void Main(string[] args)
{
// 读取原始位图
BitmapImage originalImage = new BitmapImage(new Uri("original.bmp", UriKind.Relative));
// 创建感兴趣区域(假设宽度是原始位图的一半,高度是原始位图的一半)
Int32Rect croppedRect = new Int32Rect(0, 0, originalImage.PixelWidth / 2, originalImage.PixelHeight / 2);
// 创建裁剪位图
CroppedBitmap croppedBitmap = new CroppedBitmap(originalImage, croppedRect);
// 创建目标数组
int stride = croppedBitmap.PixelWidth * (croppedBitmap.Format.BitsPerPixel / 8);
byte[] pixels = new byte[croppedBitmap.PixelHeight * stride];
// 复制感兴趣的区域到目标数组
croppedBitmap.CopyPixels(pixels, stride, 0);
// 将目标数组保存为新的位图
BitmapSource targetBitmap = BitmapSource.Create(croppedBitmap.PixelWidth, croppedBitmap.PixelHeight, croppedBitmap.DpiX, croppedBitmap.DpiY, croppedBitmap.Format, null, pixels, stride);
// 保存为新的位图文件
using (FileStream stream = new FileStream("cropped.bmp", FileMode.Create))
{
BmpBitmapEncoder encoder = new BmpBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(targetBitmap));
encoder.Save(stream);
}
Console.WriteLine("Cropped bitmap saved.");
Console.ReadLine();
}
}
}
在此示例中,我们首先读取一个名为"original.bmp"的原始位图。然后,我们使用CroppedBitmap
类创建了一个新的裁剪位图,其中包含原始位图的一半大小的矩形区域。接下来,我们创建了一个目标数组,将感兴趣的区域复制到该数组中。最后,我们使用BitmapSource.Create
方法将目标数组保存为新的位图,并将其保存到名为"cropped.bmp"的文件中。
请确保将"original.bmp"文件放在与代码文件相同的目录下,并根据需要更改文件名和路径。