【问题标题】:Re-sizing Image Using CDC使用 CDC 调整图像大小
【发布时间】:2014-12-10 01:21:30
【问题描述】:

我正在尝试为我的程序编写一个组件来调整视频中图像帧的大小。当前代码被调用,它从当前帧中获取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。

使用上面的当前代码,我得到以下输出。

谢谢!

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

【问题讨论】:

  • 您是否打算调整图像大小并将其显示在与源窗口(框架)相同的窗口(框架)中?
  • 是的,我希望能够重新调整图像大小并将其显示在同一帧内。有什么办法吗?
  • 我仍在试图弄清楚如何在这些 cmets 中显示代码。对不起,不整洁

标签: c++ frames cdc video-editing lpstr


【解决方案1】:

一种快速的方法。创建一个空白(白色)图像并将其拉伸到原始图像上,然后 StretchBlt 调整大小的图像。

【讨论】:

  • 你知道有什么方法可以在不使用任何其他图像/视频的情况下完成它吗?
  • ' 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);删除DC(hTargetDC);返回 tBitmap; ' 这不是 MFC,但应该可以帮助你。有了新图像后,使用“矩形”并在原始图像上绘制一个白色多边形,然后使用该函数对图像进行 bitblt 复制。
猜你喜欢
  • 2015-05-02
  • 2011-09-07
  • 2021-06-25
  • 2012-02-28
  • 2013-08-21
  • 2012-08-09
  • 2011-04-26
  • 2012-06-23
  • 2017-04-01
相关资源
最近更新 更多