2015-03-30 2 views
0

Я делаю приложение WinForms с использованием VS2012 C++/cli и используя DrawImage для отображения HD-изображений, снятых с веб-камеры.DrawImage Высота Параметр Не работает

Изображения 1920 x 1080 растровых изображений, которые я пытаюсь отобразить на панели управления. Панель 240 x 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 х 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); 
    } 

Благодарим за любую помощь.

+0

Что происходит вместо этого? Какую высоту он использует вместо «правой»? – bokibeg

+0

Когда высота указана как высота панели (т. Е. 135), ничего не отображается вообще. Когда я определяю высоту как 636 (т. Е. Абсолютное местоположение в окне), изображение отображается, но не изменяется по вертикали. – user1805103

+0

Ваш код верен. Он должен работать. Если вы используете вместо 'destRect'' 'point в (0, 0), что вы получаете? –

ответ

0

Я понял это. Массив, хранящий битмапы, был инициализирован, но область инициализации была недостаточно постоянной. Таким образом, ссылки, хранящиеся в массиве, были потенциально очищены от мусора. По какой-то нечетной причине единственный способ показать это был вертикальный параметр вызова drawimage. Как только я исправил инициализацию, вызов drawimage работал правильно.

Смежные вопросы