需求:一张很大的图纸,TIFF的,大小有6000*9000左右的样子,需要在图纸的边角处加一小图标,但是图标不能画在图纸上,也就是说最终画了图标的图纸会比原始的稍微宽一点。我现在的解决方案是:
Bitmap b = new Bitmap(新宽度, 高度, System.Drawing.Imaging.PixelFormat.Format16bppRgb555);
Graphics g = Graphics.FromImage(b);
g.DrawImage(大图纸图象, 0,0);
g.DrawImage(小图标图象, x,y);
....问题:
g.DrawImage(大图纸图象, 0,0);这句话性能其差无比,需要大约3分钟时间。因为图纸是黑白的,所以我又想尝试更改PixelFormat,然而如果用PixelFormat.Format1bppIndexed,“Graphics g = Graphics.FromImage(b);”却又无法通过,郁闷啊。请教高手:我的步骤是否正确?怎么能提高性能?或者有否其它路可以走?

解决方案 »

  1.   

    to:mythofcynthia(Blue)   给个代码
      

  2.   

    TIFF的格式没有研究过,如果是JPEG可以用流的方式,
    只打开你需要的一部分,不过也比jiao复杂,
      

  3.   

    了解了一下 TIFF文件
    TIFF由Aldus和微软联合开发,最早是为了存储扫描仪图像而设计的,因而它现在也是微机上使用最广泛的图像文件格式,在Macintosh和PC机上移植TIFF文件也十分便捷。TIFF文件的扩展名为.tif或.tiff。该格式支持的颜色深度,最高可达24位,因此存储质量高,细微层次的信息多,有利于原稿的复制。该格式有压缩和非压缩2种形式,其中压缩采用的是LZW无损压缩方案。不过,TIFF格式包罗万象,造成了结构较为复杂,变体很多,兼容性较差,它需要大量的编程工作来全面译码。因此,有时您的软件能认识TIFF文件,有时可能就不认识,对此,您不必大惊小怪。另外,使用过Photoshop的人都知道,在Photoshop中,*.tif文件可以支持24个通道,是除了Photoshop自身格式以外,惟一能存储多于4个通道的文件格式。你要的其实是在一张图上绘制另外一张图,可以找出一个算法,小图的在大图的位置和大小,
    你打开文件之后,只要取出这一小段文件就可以,然后把绘制好的图像还原成图像数据存在这个流里面
    问题的关键就是找到这段需要的数据。