如何解决GDI+渲染图片慢的问题?

项目是做一个画图程序,最近加入了一个图片闪烁的效果,用timer定时每100ms画一遍,每遍通过colormatrix设置不同的alpha值实现(colormatrix几乎不会增加负荷,渲染速度仅增加1ms消耗)。效果是没问题,但是效率有问题了。当画一个3000*3000的jpeg图片的时候,debug模式下测试平均需要8ms(graphics的所有参数都设置为速度优先),此时还比较流畅。但是当图片缩小后再画出来就达到35ms左右(通过Gdi.ScaleTransform()进行缩放的),效率明显下降,卡顿严重,鼠标move、click事件都不响应了,伤脑筋了,没有想到好的解决办法,放大没事,就缩小会卡。总结一下,问题的原因就是大幅图片缩小画出来效率低。

多线程能解决吗?想用主线程的timer发重画请求道queue里面,多个线程从queue中取出请求在后台线程渲染整幅图片然后发到另一个queue中,主线程从这个queue中取按请求顺序取图片画到form上。同时主线程响应用户鼠标move、click等操作改变图形的坐标等状态。但是对c#多线程不熟,怎么同步呢?能提高效率吗?

TO BE CONTINUED...

时间: 2024-11-10 08:04:47

如何解决GDI+渲染图片慢的问题?的相关文章

使用GDI+进行图片处理时要注意的问题

与GDI相比,GDI+要强大非常多.对于Windows应用程序来说,用GDI是比較多的,也是比較熟练的,GDI+相对用的较少一点,可是如今GDI+的使用已经非常普遍了.GDI+支持各种类型图片的处理,比方常见的bmp.jpg.gif.png等类型,特别是GDI+处理png图片时有非常大的优势.有时我们须要将图片文件载入到内存中,然后进行UI的绘制,因为要支持多种类型的图片的载入,所以首先想到的是使用GDI+中的图片处理类Image或Bitmap.有时我们也须要将内存中的位图数据,保存成各种类型的

iOS给图片添加滤镜&使用openGLES动态渲染图片

给图片增加滤镜有这两种方式: CoreImage / openGLES 下面先说明如何使用CoreImage给图片添加滤镜, 主要为以下步骤: #1.导入CIImage格式的原始图片 #2.创建CIFilter滤镜 #3.用CIContext将滤镜中的图片渲染出来 #4.导出渲染后的图片 参考代码: 1 //导入CIImage 2 CIImage *ciImage = [[CIImage alloc] initWithImage:[UIImage imageNamed:@"hua"]]

canvas代替img渲染图片

移动端用canvas代替img渲染图片,可以提高性能 var oImg = new Image(); oImg.src = url; oImg.onload = function(){ var cvs = $('#cvsIndex')[0].getContext('2d'); cvs.width = this.width; cvs.width = this.height; cvs.drawImage(this,0,0); }

Mapnik读取PostGIS数据渲染图片

__author__ = 'Administrator' # encoding: utf-8 import sys import datetime import mapnik m = mapnik.Map(256,256,"+proj=latlong +datum=WGS84") #m.background = mapnik.Color('steelblue') # set background colour to 'steelblue'. s = mapnik.Style() r =

一种使用GDI+对图片尺寸和质量的压缩方法

今天同事向我询问图片压缩的算法,我想起大概两三年前做过的一个项目.其中包含了尺寸和质量两种压缩算法,并且支持JPEG.bmp.PNG等格式.今天把这段逻辑贴出来,供大家参考.(转载请指明来源于breaksoftware的CSDN博客) 尺寸压缩 bool CompressImagePixel( const WCHAR* pszOriFilePath, const WCHAR* pszDestFilePah, UINT ulNewHeigth, UINT ulNewWidth ) { // Ini

终极解决maya渲染层丢材质,变线框等问题

终极解决maya渲染层丢材质,变线框等问题 相信有很多同志在使用maya做灯光渲染的时候,经常能遇到渲染层的模型丢材质.变线框等问题,特别恶心.我也经常遇到,所以和大家分享一下我的解决或尽量避免的方法. 引用文件(Reference)工作原理: 引用文件在生产中以层级的方式来工作,每个层级都可以同时做不同的工作. 当创建完引用文件后,在当前场景里会保存引用对象的原始数据,并且所有编辑修改的数据都会储存在引用节点(Reference)里,也就是当前的maya文件里. 当打开当前场景文件时数据是从低

C# 解决调用winform窗体顶置且解决任务栏图片显示问题

窗体顶置两种方法: 方法1: /// <summary> /// 设置当前活动的窗口 /// </summary> [DllImport("user32.dll", CharSet = CharSet.Auto)] private static extern int SetWindowPos(IntPtr hWnd, int hWndInsertAfter, int x, int y, int Width, int Height, int flags); ///

mvc 解决StyleBundle中 图片绝对路径 装换成相对路径的问题

问题 解决办法 mvc 解决StyleBundle中 图片绝对路径 装换成相对路径的问题

AGG第四十一课 AGG和GDI渲染字体大小对比

如下是GDI渲染字体的代码: CClientDC dc(this); CPen pen(PS_SOLID,3,RGB(0,255,255)); CPen* pOldPen; pOldPen=dc.SelectObject (&pen); dc.SelectObject (&pOldPen); CFont font; CFont* pOLdFont = NULL; font.CreatePointFont(10,_T("System"),&dc); pOLdFon