当前位置: 代码迷 >> C# >> WPF画了10w条线,图像可以显示,但是保存到png文件时,提示“图像尺寸超过此编码解码器支持的范围”
  详细解决方案

WPF画了10w条线,图像可以显示,但是保存到png文件时,提示“图像尺寸超过此编码解码器支持的范围”

热度:128   发布时间:2016-05-05 04:58:43.0
WPF画了10w条线,图像可以展示,但是保存到png文件时,提示“图像尺寸超过此编码解码器支持的范围”?
有什么解决方法?
DrawingVisual drawingVisual = new DrawingVisual();
DrawingContext drawingContext = drawingVisual.RenderOpen();
for (int i = 0; i < 100000; i++)
{
Pen pen = getPen();
drawingContext.DrawLine(pen, new Point(10, 10 + i), new Point(500, 10 + i));
}
drawingContext.Close();

System.IO.FileStream fs = new System.IO.FileStream(@"C:/test/test.png", System.IO.FileMode.Create);
                RenderTargetBitmap bmp = new RenderTargetBitmap((int)(drawingVisual.ContentBounds.Width), (int)(drawingVisual.ContentBounds.Height), 96d, 96d, PixelFormats.Pbgra32);
                bmp.Render(drawingVisual);
                BitmapEncoder encoder = new PngBitmapEncoder();
                encoder.Frames.Add(BitmapFrame.Create(bmp));
                encoder.Save(fs);
                fs.Close();

------解决思路----------------------
看你代码这个长宽是按你i,j增长?  疑似你的长宽太大,造成存储文件过大造成,你可以测试下是否最文件过大造成,建议最好先定义好图片的大小,然后再绘制输出。 
drawingContext.DrawLine(pen, new Point(10, 10 + i), new Point(500, 10 + i));
------解决思路----------------------
引用:
Quote: 引用:

看你代码这个长宽是按你i,j增长?  疑似你的长宽太大,造成存储文件过大造成,你可以测试下是否最文件过大造成,建议最好先定义好图片的大小,然后再绘制输出。 
drawingContext.DrawLine(pen, new Point(10, 10 + i), new Point(500, 10 + i));


画1w条线输出文件没问题,10w条就出错了.
文件大的情况下要怎么输出才不会出错?

只能分文件存储,用的时候拼接
------解决思路----------------------
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

看你代码这个长宽是按你i,j增长?  疑似你的长宽太大,造成存储文件过大造成,你可以测试下是否最文件过大造成,建议最好先定义好图片的大小,然后再绘制输出。 
drawingContext.DrawLine(pen, new Point(10, 10 + i), new Point(500, 10 + i));


画1w条线输出文件没问题,10w条就出错了.
文件大的情况下要怎么输出才不会出错?

只能分文件存储,用的时候拼接


不是吧,WPF连一个500*100000像素的图片都没办法保存????

10W很小吗
你试试用windows画图板能把图片定义成500*10W?
------解决思路----------------------
这么庞大的数据量两个解决办法,栅格文件,或矢量存储。
看你的需求还是栅格比较实在,不过会有些失真,所以最好的办法还是矢量,唉唉。
栅格会失zhe

矢量的就不说了,实现方法太多,也很麻烦,需要的话自己去研究吧。
 
  相关解决方案