(2007-02-08) (阅读次数: 3097)
(2006-11-30) (阅读次数: 3249)
本节描述DirectShow的整体结构。本节包含的内容比较丰富,我们可能不需要知道所有的这些知识。因此,我们首先应该选择浏览全部的内容,然后根据实际应用程序的需要查看Using DirectShow的内容。如果有关于DirectShow结构的特殊问题,可以再回过来参考本节的内容。
(2006-11-30) (阅读次数: 2148)
CComBSTR是非常有用的ATL工具类,它封装了BSTR数据类型。CComBSTR类唯一的数据成员是变量m_str。
class CComBSTR
{
public:
BSTR m_str;
};
CComBSTR提供了非常丰富的对象构造方法和字符串操作函数,减少了处理BSTR字符串的很多问题。
(2006-11-27) (阅读次数: 2386)
本节描述DirectShow的整体结构。本节包含的内容比较丰富,我们可能不需要知道所有的这些知识。因此,我们首先应该选择浏览全部的内容,然后根据实际应用程序的需要查看Using DirectShow的内容。如果有关于DirectShow结构的特殊问题,可以再回过来参考本节的内容。
(2006-11-23) (阅读次数: 2300)
在Windows NT中,图形多媒体系统基于层次结构。应用程序与顶层的API(实际上是多个用户模式的系统DLL,比如GDI32.DLL)交互,这些系统DLL最终会通过系统服务调用处于内核模式的系统服务。NT系统的详细信息可参考《Windows 图形编程》的第一、二章。在Windows Vista中,图形系统已经移出了内核模式,并有自己的空间--WPF。
WPF移出内核除了全面提高稳定性(内核模式中通常需要共享资源),也使得实现内核模式高级控制成为可能。首先,WPF不再唯一依靠GDI图形API,Vista更多的依靠Direct3D处理图形操作,这样允许更多的D3D特征,实现更酷的外观和效果。当然,为了实现这样的效果,Vista的设计上也有所改变。Windows Vista尽量不用CPU进行显示,而是用显示卡的图形处理单元(Graphics Processing Unit, GPU),用矢量图代替位图。
Windows Vista还采用了另外一种驱动模型--Windows显示驱动模型(WDDM)。实现操作系统和图形卡GPU之间更复杂的通信。为了处理操作系统更高的3D处理请求,新的WDDM驱动类型需要更多的显示卡内存。Vista能尽可能的利用显示卡以达到最好的性能。
现在基本了解了Windows Vista图形系统,再看看其可测量性。Windows Vista可提供非常高的终端图形,据此很多人都错误的认为:为了运行Windows Vista操作系统,必须要非常高端的图形硬件。事实上并不完全如此。Windows Vista图形系统一个关键好处就是可以检测显示卡的性能。Vista根据不同的性能和驱动模型(WDDM,XPDM)提供给用户不同的用户体验。
(2006-11-14) (阅读次数: 2692)
本节描述DirectShow的整体结构。本节包含的内容比较丰富,我们可能不需要知道所有的这些知识。因此,我们首先应该选择浏览全部的内容,然后根据实际应用程序的需要查看Using DirectShow的内容。如果有关于DirectShow结构的特殊问题,可以再回过来参考本节的内容。
(2006-10-25) (阅读次数: 2544)
手把手教你写Undo、Redo程序
Undo、Redo操作是很多具体编辑功能的软件所不能缺少的。最典型两种类型就是文本编辑和图像编辑软件。然而它的实现在某种程度上来说也不是很简单。我也废话少说。要在程序中支持Undo、Redo操作,就需要保存一些必要的信息,这个是众所周知的。如果想支持无限级的Undo、Redo操作,保存的信息就会无限的膨胀,问题来了,如何设计才能使每一步操作保存的数据尽可能少。下面我就以图像编辑软件为例。说明如何在图像编辑中添加Undo、Redo功能。
(2006-10-23) (阅读次数: 1877)
在第一篇文章“手把手教你写Undo、Redo程序”里,我介绍了如何实现一个基于图像操作的Undo, Redo框架结构。但是我们现在所讲的还只是Undo类的结构。还有一个非常重要的部分没有说明:我们的这些Undo类应该在什么地方使用呢?
(2006-07-07) (阅读次数: 5145)
GIF动画文件含有多个图像数据帧,GDI没有直接提供对GIF文件的支持。在GDI+中,通过Image对象可以很容易的操作GIF文件。
(2006-07-05) (阅读次数: 3133)
IPicture接口管理一个图片对象和它的属性。图片对象提供对Bitmap Icon Metafile的语言不相关的抽象支持。图像对象的主要接口是IPicture和IPictureDisp。IPictureDisp从IDispatch继承,提供了通过自动化访问图片属性的能力。图片对象可通过OleCreatePictureIndirect创建。关于IPicture支持的其他接口和方法可以看MSDN,一般创建图片对象可以用OleLoadPicture函数,它简化了基于流内容创建图片对象。
(2006-07-03) (阅读次数: 3415)
一个完善的工具程序,除了需要很好的功能实现外,也要求界面美观和易于使用、理解。现在有很多的界面库,给美化程序UI提供了极大的方便。这个部分将讲述如何实现一些基本的图像处理工具界面。
(2006-07-03) (阅读次数: 2744)
工具箱含有选择、填充、画线等功能。使用这些工具时有的需要设置填充风格和线条的大小。为了方便用户操作,实现更简易的UI,实现了属性工具栏。属性栏需要添加的主要功能有2个显示文字的静态文本框和2个组合框。
(2006-07-03) (阅读次数: 2363)
在字体设置工具栏中也有一个静态文本框和二个组合框,一个是字体大小的组合框,它可以用普通的CComboBox实现。字体名称选择组合框,如果考虑简单一些的做法也可以用CComboBox,这种方法只是需要枚举出系统的字体名称就可以了。
(2006-07-03) (阅读次数: 1972)
现在,我们还没有看字体枚举的回调函数是如何工作的。回调函数里每次回调一个新的字体就需要创建一个CFontInfo对象,并写入相应的信息,然后添加到CFontComboBox的成员m_pFontVec中。在这个回调的静态函数里就需要访问CFontComboBox 对象,原来在调用这个函数的时候我们把一个CFontComboBox 对象的this指针通过LPARAM参数传入了回调函数。一切就都不是问题了。
(2006-07-03) (阅读次数: 2345)
至此,所有我们需要的信息都获取到了,并进行了必要的清除工作。在CFontComboBox头文件里还有两个函数没有介绍:MeasureItem、DrawItem.。熟悉MFC控件类的朋友一看就知道是自绘控件。接下来我们就看看自绘是如何进行的。在自绘CListCtrl、CListBox、CComboBox时,都需要重载MeasureItem、DrawItem函数,前者计算每个Item需要的高度,后者完成绘图功能。