我有一个 jpeg 图像。我将此位图数据保存到字节数组中。
此 jpeg 的宽度为 100,高度为 100。
我想提取 Rectanlge(10,10,20,20) 的图像;
显然,我可以通过这个字节数组进行交互,但我不确定如何将我想要的 x、y 像素与这个字节数组相关联。我知道我必须使用 4 的步幅和像素大小,因为它是 rgba。
我有这个来自这个链接,用 C# 从 BitmapData 裁剪一个区域。
Bitmap bmp = new Bitmap(_file);
Rectangle rect = new Rectangle(0, 0, bmp.Width, bmp.Height);
BitmapData rawOriginal = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.ReadWrite, PixelFormat.Format32bppRgb);
int origByteCount = rawOriginal.Stride * rawOriginal.Height;
byte[] origBytes = new Byte[origByteCount];
System.Runtime.InteropServices.Marshal.Copy(rawOriginal.Scan0, origBytes, 0, origByteCount);
int BPP = 4;
int width = 20;
int height = 20;
int startX = 10;
int startY = 10;
for (int i = 0; i < height; i++)
{
for (int j = 0; j < width * BPP; j += BPP)
{
int origIndex = (startX * rawOriginal.Stride) + (i * rawOriginal.Stride) + (startY * BPP) + (j);
int croppedIndex = (i * width * BPP) + (j);
//copy data: once for each channel
for (int k = 0; k < BPP; k++)
{
croppedBytes[croppedIndex + k] = origBytes[origIndex + k];
}
}
}
但是这个:
int origIndex = (startX * rawOriginal.Stride) + (i * rawOriginal.Stride) + (startY * BPP) + (j);
我发现是不正确的。
有谁知道我应该在这里设置什么值?
谢谢