Я делаю приложение WinForms, используя VS2012 c ++ / cli и DrawImage для отображения HD-изображений, снятых с веб-камеры.
Изображения представляют собой растровые изображения 1920 x 1080, которые я пытаюсь отобразить на панели управления. Размер панели составляет 240 х 135 (т. Е. Ровно 1/8 от HD-изображения).
Я вызываю DrawImage следующим образом:
System::Drawing::Rectangle destRect = System::Drawing::Rectangle(0,0,Cam0Panel->Width,Cam0Panel->Height);
g->DrawImage(b,destRect);
Следует указать, что изображение должно быть нарисовано в относительном положении 0,0 на панели, а размер изображения должен быть 240 x 135. Однако изображение не будет отображаться.
Если я изменю параметр Height, чтобы указать Panel-> Bottom (который является абсолютной позицией в приложении — ~ 630), изображение отображается и имеет правильный размер по ширине, но не правильный размер по высоте.
Есть идеи, что я делаю не так или как правильно изменить размер и отобразить изображение?
Вот полная версия кода.
void Cam0Panel_Paint( Object^ /*sender*/, System::Windows::Forms::PaintEventArgs^ e )
{
System::Drawing::Bitmap^ b = ImageWinArray[CHANNEL_SELECT0];
Graphics^ g = e->Graphics;
g->InterpolationMode = System::Drawing::Drawing2D::InterpolationMode::Bilinear;
g->CompositingMode = System::Drawing::Drawing2D::CompositingMode::SourceCopy;
System::Drawing::Rectangle destRect = System::Drawing::Rectangle(0,0,Cam0Panel->Width,Cam0Panel->Bottom);
g->DrawImage(b,destRect);
}
Спасибо за любую помощь.
Я понял это. Массив, хранящий растровые изображения, был инициализирован, но область инициализации была недостаточно постоянной. Таким образом, ссылки, хранящиеся в массиве, были потенциально очищены от мусора. По какой-то странной причине единственным способом, которым это было обнаружено, был вертикальный параметр в вызове drawimage. Как только я исправил инициализацию, вызов drawimage работал правильно.