Я испытал, что метод I. медленнее, чем II. Мое приложение выполняет обработку изображений в реальном времени. Я знаю, что C# не идеален для этой цели, но я могу отделить критические вещи от производительности и сделать это на C++, например. Мне интересно, почему медленнее на C# простой чертеж Bitmap без каких-либо вычислений. Мой вопрос: есть ли более быстрый метод в C#, чем I.?Скорость рисования фотокамер 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);
}
Спасибо за ответ. Мой код не преобразует изображение (изменение размера или смягчение и т. Д.), Просто скопируйте растровое изображение на экран. Формат Bitmap - 32bppArgb, потому что это значение по умолчанию. – bsebi 2010-12-16 20:39:16
PictureBox делает, вот что говорит ваш фрагмент. Дело в том, чтобы * изменить * формат растрового изображения, не использовать значение по умолчанию. – 2010-12-16 20:41:51