使用Direct3D9播放视频,窗口放大到比初始化硬解参数时的尺寸还要大时,图像模糊

  如题,由于本人以前没有接触过Direct3D,所以这个问题搞了好久才搞好,给我印象深刻,写篇博客记录下。


  在代码中,使用了两种不同的绘图方式:软解时使用GDI,硬解时使用Direct3D9,因为实现硬解时Direct3D9的COM接口指针已经得到了,所以播放就用Direct3D9了。

  由于Direct3D是为3D处理而生的,播放视频只是副业,里面很多名称都是与3D绘图有关。


  不说废话了,回到正题上。其实这个问题很简单,是我想复杂了。


  在IDirect3D9的CreateDevice方法中,需要传入一个窗口句柄和一个结构体作为创建设备的参数。而在这个结构体中有两个成员:BackBufferWidth和BackBufferHeight。他们的大小直接决定了播放时图像的最大分辨率。如果你传入的是一个小窗口的宽高,不论原视频大小,这个长宽将作为视频播放时的最大宽高值,当你把窗口放大到比这个宽高还要大时,就会出现模糊。


  我的解决方法是把以上两个成员赋值为显示器的宽高,因为你窗口放的再大,总不能超过显示器大小(其实就是全屏)。


  这样问题是解决了,但不知道这样符不符合Direct3D API的设计初衷。我也不知道在其他API中有没有给出后悔API,在窗口大小发生变化时,可以重设上面两个成员的值。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值