【发布时间】:2013-10-02 14:14:41
【问题描述】:
我有一张 jpeg 图片。我将此位图数据保存到字节数组中。
此 jpeg 的宽度为 100,高度为 100。
我要提取 Rectanlge(10,10,20,20); 的图像
显然,我可以通过这个字节数组进行交互,但我不确定如何将我想要的 x、y 像素与这个字节数组相关联。我知道我必须使用 4 的步幅和像素大小,因为它是 rgba。
我有这个来自这个链接cropping an area from BitmapData with C#。
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);
我发现不正确。
有人知道我应该在这里设置什么值吗?
谢谢
【问题讨论】:
标签: c# bytearray bitmapdata