DDraw的问题:如何缩放图像?

wpmsoft 2003-11-28 04:59:16
已创建好一个固定大小的显示平面,现在有一大小不定(可能比平面指定的大小大,也可能小)的图像数据,需要将此图像数据进行缩放,然后复制到平面中,以实现显示。

请问该如何进行上述操作?如果我的描述不清,请指出,我将在线进行解答。
...全文
105 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
wpmsoft 2003-12-16
  • 打赏
  • 举报
回复
其实,最简单的就是:直接BLT函数就可以实现了,我真是笨到家了。

不过,还是谢谢诸位。给分算了,反正分多了也没有什么用。
yintongshun 2003-12-02
  • 打赏
  • 举报
回复
在后台缓冲区中载入一个位图文件
  一旦DirectDrawPalette对象被嵌入到DirectDrawSurface对象之中,DDEX2就将Back.bmp位图载入到后台缓冲区中。使用下例的程序代码可实现该过程:

  // Load a bitmap into the back buffer.
  ddrval = DDReLoadBitmap(LpDDSBack, szBackground);
  if( ddrval != DD_Ok )
    // Load failed

  DDReLoadBitmap是出现在Ddutil.cpp中的另一个函数。它从一个文件或资源中将一个位图文件载入到一个已经存在的DirectDraw表面之中。(就像在DDEX5中那样,你可以使用DDLoadBitmap创造一个表面并且将位图载入那个表面。对于DDEX2来说,DDReLoadBitmap把szBackground指向的Back.bmp载入到ipDDSBack指向的后台缓冲区,DDReLoadBitmap调用DDCopyBitmap函数,将文件复制到后台缓冲区中,并且将缓冲区扩展到适当的。DDCopyBitmap函数将位图复制到内存之中,然而利用GetObject函数得到位图的大小。DDCopyBitmap然后使用下列的代码得到后台缓冲区的大小(它可以放置位图):

  //
  // get size of surface
  //
  ddsd.dwSize = sizeof(ddsd);
  ddsd.dwFlags = DDSD_HEIGHT DDSD_WIDTH;
  lpdds->GetSurfaceDesc(&ddsd);

  ddsd是指向DDSRFACEDESC结构的一个指针。该结构存储了DirectDraw表面的当前描述。在这种情况下,我们需要注意的是:DDSURFACEDESC的成员描述这个表面的高度和宽度,分别表示为:DDSD_HEIGHT和DDSD_WIDTH。调用IDirectDrawSurface::GetSurfaceDesc方法,把适当的值来载入到这个结构。对于DDEX2来说,这些值将是:高480和宽640。DDCopyBitmap函数锁定表面并将位图文件复制到后台缓冲区,使用StretchBit函数延伸或压缩后台缓冲区到可适用的大小。表示如下:

  if((hr = lpdds->GetDC(&hdc)) == DD_OK)
  {
    StretchBlt(hdc, 0,0,ddsd.dwWidth, ddsd.dwHeight, hdcImage,x, y, dx, dy, SRCCOPY);//StretchBlt就可以缩放
    lpdds->ReleaseDC(hdc);
  }

wpmsoft 2003-12-02
  • 打赏
  • 举报
回复
利用CDC的这个函数是可以,不过建立两个平面,取得DC,再缩放。

我试了一下,它的效率太低下了,慢得人受不了。

我想,DDRAW应该有它的缩放函数吧,如果硬件支持的话,又何必要软件缩放呢?

高手们说呢?
fayifu 2003-11-28
  • 打赏
  • 举报
回复
利用CDC::StretchBlt函数。
wpmsoft 2003-11-28
  • 打赏
  • 举报
回复
或者可以创建两个平面,一个平面中没有数据,一个平面中有数据,要将后一个平面缩放到第一个平面中(即数据移植)。当然,两个平面是不一样大小的,也就是要实现缩放。

16,550

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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