私は、IメソッドがIIより遅いことを経験しました。私のアプリケーションはリアルタイムの画像処理を行います。私はC#がこの目的には理想的ではないことを知っていますが、パフォーマンスの重要なことを分けて、C++で作ることができます。私はなぜC#で単純なビットマップの描画を計算せずに遅く思っています。私の質問:C#で高速メソッドがありますか?C#ピクチャボックス描画速度
I. C#:
void DrawImg(Bitmap b)
{
pictureBox1.Image = b;
pictureBox1.Invalidate();
}
II. C# + C++ + OpenCV
C# side:
[DllImport("MyWrapper.dll")]
static extern void showimg(IntPtr p, int x, int y);
void DrawImg(Bitmap b)
{
BitmapData d = b.LockBits(new Rectangle(0, 0, b.Width, b.Height), ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb);
showimg(d.Scan0, d.Width, d.Height);
b.UnlockBits(d);
}
C++ side:
extern "C" void __stdcall showimg(uchar* p, int x, int y)
{
Mat img; // OpenCV's Mat class
img.create(y, x, CV_8UC3);
img.data = p;
imshow("Window1", img);
}
返信ありがとうございます。私のコードは、(ビットマップを画面にコピーするだけで、画像のサイズを変更したり、スマイリングなどを変換しません。これがデフォルトであるため、ビットマップの形式は32bppArgbです。 – bsebi
PictureBoxは、あなたのスニペットが使用すると言います。ポイントは*ビットマップ形式を変更する*でした、デフォルトを使用しないでください。 –
pictureBox1.SizeMode ==通常のので、サイズ変更はありません。今は別のピクセル形式を試しましたが、それほど大きな違いはありませんでした。 – bsebi