私は安全ではないコードとポインタを使用してプロセス全体を高速化するクロッピングメソッドを自分自身で実装しようとしています。C#画像からの領域をカット
private unsafe void Cut(Bitmap bmp, Rectangle r) {
Bitmap result = new Bitmap(r.Width, r.Height, bmp.PixelFormat);
BitmapData bmData = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), System.Drawing.Imaging.ImageLockMode.ReadOnly, bmp.PixelFormat);
BitmapData bmData2 = result.LockBits(new Rectangle(0, 0, result.Width, result.Height), System.Drawing.Imaging.ImageLockMode.ReadWrite, result.PixelFormat);
IntPtr scan0 = bmData.Scan0;
IntPtr scan02 = bmData2.Scan0;
int stride = bmData.Stride;
int stride2 = bmData2.Stride;
int x = r.X;
int y = r.Y;
int width = r.Width;
int height = r.Height;
for (; y < height; y++) {
byte * p = (byte *) scan0.ToPointer();
p += y * stride;
byte * p2 = (byte *) scan02.ToPointer();
p2 += y * stride2;
for (; x < width; x++) {
p2[0] = p[0];
p2[1] = p[1];
p2[2] = p[2];
p2[3]=p[3];
p += 4;
p2 += 4;
}
}
result.Save("a.png");
}
そして、このメソッドの呼び出し::
Bitmap b = (Bitmap)Bitmap.FromFile(@"C:\Users\itapi\Desktop\1.png");
Rectangle r = new Rectangle(200, 500, 300, 450);
Cut(b, r);
私は、コードを実行すると、私はちょうどその結果として、黒の四角形を取得
これは私のコードです。私はインライン画像からコピーしたいピクセルではありません。
上記の例からの画像は、私がwrong..i'll任意の助けに感謝やっているかわからないんだけど32bpprgb
形式 です。
ありがとうございました。
は、あなたはそれが:)まだ問題は解決しませんでしたright..but気にいら指さ: それはトリミングして、ファイルを保存し、これを試してみてください。私は同じ黒いイメージを見る。 – Slashy
for(; y
CharlesW
あなたのコードにできるだけ小さな変更を加えました。私はあなたのためにそれを書き直さなかった、ちょうどそれがYのために働かせた、それは間違った場所でXを作ったが、あなたはそれを理解することができる....... – CharlesW