2014-10-15 2 views
-1

Я пытаюсь написать компонент для моей программы, чтобы изменить размер кадров изображения из видео. Вызывается текущий код, который принимает CDC из текущего кадра.Изменение размера изображения с помощью CDC

void showImageFrame(LPSTR info) 
{ 
    BITMAPINFOHEADER * pInfo = (BITMAPINFOHEADER *)info; 
    CDC* pDC=pWnd=GetDlgItem(IDCFrame)->GetDC(); 
    CRect rect; 
    pWnd->GetClientRect(&rect); 
    SetDIBitsToDevice(pDC->GetSafeHdc(), 0, 0, rect.Width(), rect.Height(), 0, 0, 0, pInfo->biHeight, info + *(LPDWORD)info, (LPBITMAPINFO) pInfo, DIB_RGB_COLORS); 
    pDC->StretchBlt(0,0,200,200,pDC,0,0,rect.Width(),rect.Height(),SRCCOPY); 
} 

StretchBlt делает изменить размер изображения, отображаемого в текущем кадре, но он сохраняет увеличенное изображение от SetDIBitsToDevice. Есть ли способ удалить изображение SetDIBitsToDevice или сделать это более эффективным способом? Я пытаюсь изменить размер изображения до 200x200.

Используя текущий код выше, я получаю следующий вывод. enter image description here

Спасибо!

http://i.stack.imgur.com/dWXRZ.png

+0

Вы хотите изменить размер изображения и показать его в окне (кадре) так же, как и исходное окно (рамка)? – elimad

+0

Да, я хочу, чтобы иметь возможность изменять размер изображения и отображать его в пределах одного кадра. Есть ли способ сделать это? – xSukiyaki

+0

Я все еще пытаюсь выяснить, как показать код в этих комментариях. извините за нечистоплотность –

ответ

0

Один быстрый способ. Создайте пустое (белое) изображение и растяните его по исходному изображению, затем StretchBlt измените размер изображения.

+0

Знаете ли вы, как это сделать, не используя другие изображения/видео? – xSukiyaki

+0

'HBITMAP CScene :: saveDCtoBuffer (HDC hdc, HINSTANCE hInst) {HBITMAP tBitmap; HDC hTargetDC = CreateCompatibleDC (hdc); tBitmap = CreateCompatibleBitmap (hdc, width, height-TOOLBARHEIGHT-STATUSBARHEIGHT); SelectObject (hTargetDC, TBitmap); BitBlt (hTargetDC, 0, 0, width, height-TOOLBARHEIGHT-STATUSBARHEIGHT, hdc, 0, TOOLBARHEIGHT, SRCCOPY); DeleteDC (hTargetDC); return tBitmap; } «Это не MFC, но вам должно помочь. После того, как у вас будет новое изображение, используйте «Прямоугольник» и нарисуйте белый полигон поверх исходного изображения, затем сверните изображение, скопированное с помощью этой функции. –

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