jiangsheng

http://www.csdn.net/develop/author/netauthor/jiangsheng/
随笔 - 142, 评论 - 629, 引用 - 27

导航

关于

这下要维护3个BLOG了,faint 其他的地址:

所有的文章版权归原文作者所有,任何人需要转载文章,必须征得原文作者授权。
我的MVP配置

标签

每月存档

最新留言

广告

祝大家春节愉快

要回家过年了,给大家拜个早年

好不容易把火车票搞定了,原来卖的票是26个小时到汉口,现在换成了12个小时到的票,感谢新浪网票务信息论坛提供交流空间


西站退票处居然要凭票进入,而且不卖站台票,真不知道那些MM自己怎么拿行李上车……

昨天又写了两篇关于MFC和浏览器控件的文章,发现自己越来越着重于形式主义了……对代码的优雅的要求可能太高了。

最近在写一个程序,把MFC7的多顶层窗口模型(MTI)搬到MFC6来用,感觉不是很好。不是多线程的程序,一个顶层窗口等待一个对话框的话其他的顶层窗口也会停止工作。什么时候MFC的多顶层窗口技术做到像IE那样就好了。但是参照MFC在多线程方面的先天不足,看起来是没什么希望。

winform技术方面,看起来还是基于对话框的应用居多,似乎也没什么开发起来简单的特性可以拿来晃花客户的眼睛,例如Active Document,MTI之类。或许再发展几年,积累多了才行吧。毕竟MFC发布了这么多年,容易使用的官方和非官方的库还是很多的。

posted on 2004-01-19 12:02:00 by jiangsheng  评论(1) 阅读(1676)

在浏览器控件中启用自动完成功能

自动完成功能在浏览器控件中默认是禁用的(但是没有任何文档提到这一点……),但是可以通过实现IDocHostUIHandler,在GetHostInfo方法中在填充DOCHOSTUIINFO结构的dwFlags成员时设置DOCHOSTUIFLAG_ENABLE_FORMS_AUTOCOMPLETE标识位来启用

关于如何实现IDocHostUIHandler,可以参考http://www.csdn.net/Develop/article/19/19627.shtm,示例工程在http://www.csdn.net/Develop/article/21/21702.shtm

我以前的努力可以在http://blog.joycode.com/jiangsheng/posts/3593.aspx中看到,是企图调用IShellUIHelper::AutoCompleteAttatch,但是这个未公开方法并无作用。

posted on 2004-01-08 18:21:00 by jiangsheng  评论(2) 阅读(3333)

不看不知道,一看吓一跳

原来博客在米国影响这么大

……

Bloggers were in large part responsible for a change of leadership in the Senate last year. When Majority Leader Lott, a Mississippi Republican, remarked at a birthday party for retiring Republican Sen. Strom Thurmond of South Carolina that the nation might have been better off had Thurmond won his segregationist campaign for president in 1948, the major media largely ignored it.

……

原文在

http://www.usatoday.com/news/politicselections/nation/2003-12-30-blogging-usat_x.htm

posted on 2004-01-03 14:44:00 by jiangsheng  评论(1) 阅读(1486)

高效屏幕录制

?祝大家新年快乐!

武汉的公交车都是1.2元,所以身上经常揣着一大把硬币。昨天晚上买火车票回北京的时候忘记取钱,结果钞票不够,加上三十余元硬币才勉强凑够车票钱——当然是硬座——身上最后还剩一块多钱……

P.S.手机充电器忘在武汉了……春节回去拿……

高效屏幕录制

屏幕录制有着广泛的用途,主要用于建立演示培训,或者远程屏幕监视和广播。由于屏幕的大小和色深通常很高,而且具有大块背景色、窗口拖动/卷动造成的内容移动和菜单弹出造成的瞬时变化等特性,因此需要在数据采集、压缩和传输/存储上多加考虑。

录制之前

录制之前,应该选择录制方法,压缩方式和录制范围。

有必要尽可能缩小录制的区域以减少数据量。在录制开始之前,可以让用户指定录制的范围,例如全屏幕,指定窗口,指定/自适应坐标等等。小的录制区域意味着更少的原始数据。

尽可能降低录制的色深以减少数据量。通常,用于简单教学的录制只需要256色。

录制之前,应该停用屏幕保护,桌布和活动桌面的一些特性以避免不必要的录制。

录制方法

录制分两种方式,一种是推模式,也就是录制模块不断录制数据,一种是拉模式,录制模块在需要的时候才录制数据。对于低带宽的场合,拉模式可以有效的减少原始数据量。对于需要基本无损回放的场合,推模式在监测到屏幕变化时就录制数据,可以减少视频质量的损失。在推模式下需要选取录制的时机,以避免大量的重复数据。

压缩编码

适当的编码方式可以有效地减少录制时的资源占用。

  • 联合图像专家组(Joint Photographic Experts Group,JPEG)编码
    在有损压缩时,对于静态图像具有比较好的压缩比率。但是有损压缩可能会使得屏幕上的文字变得模糊。
  • 运动图像专家(MPEG)组编码
    适合运动的图像,但是剧烈变化的图像,例如菜单的弹出,可能会暂时使录制的视频质量降低,以及CPU资源占用的升高。
  • 远程帧缓冲(Remote Frame Buffer,RFB)编码
    包括对于窗口拖动/卷动造成的内容移动造成的矩形复制(copy rectangle)和背景色的优化。对于每个矩形,可以有各种不同的编码方式,例如MPEG或者JPEG。
  • 分块比较编码
    将每次录制的屏幕分块和上次录制的屏幕内容比较,如果某块抽样变化了,那么编码整个块。对于每个块,可以有各种不同的编码方式,例如MPEG或者JPEG。

根据录制内容的不同,以及编码设置的不同(例如质量和分块大小设置),以上编码方式可能各有所长。

额外的考虑

  • 扫描线
    隔行扫描而不是逐行扫描屏幕数据可以有效地减少录制的数据量,同时录制的视频质量降低不大。
  • 录制时机
    虚拟显示设备或者适当的系统钩子可以使你在屏幕变化或者即将变化时得到通知,这样可以尽可能地减少录制的次数。参见
    http://ultravnc.sourceforge.net 以及http://www.realvnc.com 提供的VNC源代码中的VNCHooks。
  • DirectX
    使用DirectX可以进行直接的显存访问,这对提高性能很有好处。但是也由于DirectX的特性,某些使用DirectX等技术的程序可能无法录制,例如大多数游戏和媒体播放器,即使可以录制也比较慢。录制这样的程序的窗口内容的方法是局部或者全局地禁用部分或者全部DirectX加速功能。
  • 机器码
    在录制和编码过程中,使用机器码模块可以有效地加强程序的性能。例如XVID的很多核心模块就是机器码。
  • 分块的大小
    大的分块意味着录制时录制的次数少,但是小的分块可能意味着较少的数据量。对于依赖于背景色的编码方式,分块大小也影响数据量。

?

其他录制内容

鼠标,水印和其他图像

在录制图像的同时,可能同时需要在屏幕内容上叠加其他图像,例如鼠标或者水印。这可以通过在每一次录制的图像上在指定位置上叠加指定的图像来完成。

//Draw the Cursor
if (g_recordcursor==1) {
??? ICONINFO iconinfo ;
??? BOOL ret;
??? ret = GetIconInfo( hcur, &iconinfo );
??? if (ret) {
??????? xPoint.x -= iconinfo.xHotspot;
??????? xPoint.y -= iconinfo.yHotspot;
??????? //need to delete the hbmMask and hbmColor bitmaps
??????? //otherwise the program will crash after a while after running out of resource
??????? if (iconinfo.hbmMask) DeleteObject(iconinfo.hbmMask);
??????? if (iconinfo.hbmColor) DeleteObject(iconinfo.hbmColor);
??? }
??? :: DrawIcon( hMemDC, xPoint.x, xPoint.y, hcur);

}

这里hMemDC包含已经录制的屏幕内容,hcur表示当前缓存的光标(因为光标不是每次录制都变化,所以缓存起来效率较高)。

音频

为了丰富媒体内容,可能有必要在录制屏幕时同时录制音频。屏幕录制占用了大量资源时,有可能造成音频的录制和压缩慢于预计的频率,结果是录制的媒体音调降低,以及可能的同步问题。

加密

如果录制的内容需要保密,那么必须考虑实施加密的性能和可行性。一般来说,为每个会话产生一个不同的密钥来进行初步的加密就可以了。

?

posted on 2004-01-01 00:10:00 by jiangsheng  评论(81) 阅读(38275)

Powered by: Joycode.MVC引擎 0.5.2.0