Ich habe erfahren, dass die I. Methode langsamer ist als II. Meine Anwendung macht Echtzeit-Bildverarbeitung. Ich weiß, dass C# für diesen Zweck nicht ideal ist, aber ich kann die leistungskritischen Dinge trennen und es zum Beispiel in C++ machen. Ich frage mich, warum in C# eine einfache Bitmap-Zeichnung ohne Berechnung langsamer ist. Meine Frage: Gibt es schnellere Methoden in C# als ich?C# Picturebox Zeichnungsgeschwindigkeit
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);
}
Danke für die Antwort. Mein Code transformiert das Bild nicht (Größenänderung oder Smothing etc.), einfach die Bitmap auf den Bildschirm kopieren. Das Bitmap-Format ist 32bppArgb, da dies der Standardwert ist. – bsebi
PictureBox tut das, was dein Snippet sagt. Der Punkt war, das Bitmap-Format zu * ändern *, verwende nicht den Standard. –
pictureBox1.SizeMode == Normal, also keine Größenanpassung. Jetzt habe ich verschiedene Pixelformate ausprobiert, aber es gab keinen großen Unterschied. – bsebi