设计开发

Gdi+画图时的颜色变换矩阵

今天在用gdi+画图片的时候,因为需要用到alpha混合实现半透明效果,本来以为像swt一样有个直接的setAlpha什么的,后来发现并非如此,gdi+实现的方式是通过”颜色变换矩阵”,而且,这样不只能做到改变画图时的alpha还能实现一些其他的颜色变换,比如反色,黑白等等,原理有点像D3D的变换矩阵,codeproject上的一篇文章对此解释的很清楚了,留个记录以后参考:http://www.codeproject.com/vb/net/colormatrix.asp

[ZT]Font应用

可以通过iEikonEnv-〉***Font()来获得Cfont指针。字体有TitleFont(),DenseFont(),DenseFont(),AnnotationFont(),Font() 共5种。画下划线的方法
font = iEikonEnv->LegendFont();
textPoint.iY = (aRect.Height() / KMiddleTextTwoVertAlign); gc.UseFont(font);//使用legendFont
gc.SetPenColor(colorBlue);//定义gc的clor
gc.SetUnderlineStyle(EUnderlineOn);//画下划线
gc.DrawText(text, textPoint); gc.SetUnderlineStyle(EUnderlineOff);//下划线结束
gc.DiscardFont();//释放内存中使用的discard

Continue reading…

TScrollBox内加TImage后的滚动速度

当TScrollBox内的TImage过大且TScrollBox本身Bound也较宽的时候会出现滚动条在滚动的时候明显延迟的情况,可能是由于我的绘图方式问题,现在是用GDI+通过TImage的handle直接绘图,另外不是在TImage的OnPaint里去重绘的,而是用了timer定时更新,因为我需要实现一些动画效果,现在尝试过将timer定时绘图的部分用一个TThread单开一个线程实现,但效果仍不是很理想。还尝试了一下根据TScrollBox的滚动条确定TImage的可视区域并用SetClip减掉没用的部分,最后也是稍微好了一点,当ScrollBox很大(整个窗口全屏的时候),拖动滚动条依然会有延迟,目前正在继续研究中……

还是CB2007的gdiplus问题

上次加了STRICT后是不报歧义错误了,编译可以正常通过,但是在链接的时候会提示无法解析的符号,好像是implib的时候生成的lib不对的样子,最后检查了一下gdiplus.dll的版本号,发现当前系统的是5.1.3097.0(这个是有漏洞的版本),从m$网站上下载了最新的5.1.3102.1360(无漏洞)版本后,implib生成.lib,链接,没有问题了。

关于SWT画半透明时用gc的setAlpha

由于gc的setAlpha会自动打开Advanced模式,相当于调用了setAdvanced(true),而这项操作意味着需要调用native的gdiplus.dll的函数,所以发布的时候如果客户端没有这个dll,就会在setAlpha的时候出异常。