jpeg画像があります。このビットマップデータをバイト配列に保存します。
この jpeg の幅は 100、高さは 100 です。
Recttanlge(10,10,20,20); の画像を抽出したい。
明らかに、このバイト配列を介してやり取りできますが、必要な x、y ピクセルをこのバイト配列に関連付ける方法がわかりません。rgbaなので、4のストライドとピクセルサイズを使用する必要があることはわかっています。
これは、このリンクから BitmapData の領域を 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);
私は間違っていることがわかりました。
ここに設定する必要がある値を知っている人はいますか?
ありがとう