DirectDraw 编程的基础问题,StretchDIBits 速度好慢

cn_martian 2007-02-13 10:30:53
我想在屏幕上输出 pOriY 里的图片,用 StretchDIBits 速度好慢,请问有什么办法可以加快速度?能否绕开 StretchDIBits ?
for(i = 0; i < iWidth; i++)
for(j = 0; j < iHeight; j++)
pOriY[i + iWidth * j] = RGB[0, 0, 255];

BITMAPINFOHEADER bi;
BYTE *pic = (BYTE*)pOriY;

bi.biSize = sizeof( BITMAPINFOHEADER );
bi.biWidth = 320;
bi.biHeight = 240;
bi.biPlanes = 1;
bi.biBitCount = 32;
bi.biCompression = BI_RGB;
bi.biSizeImage = 320 * 240 * 4 ;
bi.biXPelsPerMeter = 0;
bi.biYPelsPerMeter = 0;
bi.biClrUsed = 0;
bi.biClrImportant = 0;

HDC hdc;
lpDDSBack->GetDC(&hdc);
SetStretchBltMode(hdc, STRETCH_HALFTONE);

StretchDIBits( hdc , //hDC
0, //DestX
0,//DestY
320, //DestWidth
240, //DestHeight
0 , //SrcX
0 , //SrcY
320 , //SrcWidth
240 , //SrcHeight
pic, //lpBits
(LPBITMAPINFO)&bi, //lpBitsInfo
DIB_RGB_COLORS , //wUsage
SRCCOPY);

lpDDSBack->ReleaseDC( hdc );
lpDDSPrimary->BltFast(r.left + 1, r.top + 1, lpDDSBack, NULL, 0);
lpDDSBack->Restore();
...全文
551 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
cn_martian 2007-03-02
  • 打赏
  • 举报
回复
我现在直接用 CopyMemory 将 pOriY 的数据拷贝到 lpDDSBack 里,然后 Blt 到主表面。速度比以前快多了,呵呵。
菜牛 2007-03-02
  • 打赏
  • 举报
回复
既然用到DirectDraw,那就加载到纹理。不要用GDI函数。
hhoking 2007-03-01
  • 打赏
  • 举报
回复
如果原图绘制没必要用STRETCH_HALFTONE参数,StretchDIBits速度还行吧。
有缩放的话,用DrawDibDraw,速度没得说。
cn_martian 2007-02-28
  • 打赏
  • 举报
回复
各位上班了吗?

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧