确切地说,我尝试过以下方法:
>创建System.Windows.Controls.Image的列表(并缩放它们).我并不感到惊讶,因为这没有用.
>创建由图像画笔填充的矩形列表.我也不感到惊讶.
>将位图呈现到System.windows.Media.Imaging.WriteableBitmap中.我希望这个表现不错;我假设位图实际上只是直接绘制而没有以任何方式引用.但是,内存消耗则另有说明.
以下是相关代码段的片段:
// create image sourceStream stream = file.OpenRead();BitmAPImage bmpimg = new BitmAPImage();bmpimg.SetSource(stream);stream.Close();// create temporary image from itImage tmpimg = new Image();tmpimg.source = bmpimg;// this is required by WriteableBitmap tmpimg.Measure(new Size(100,100));tmpimg.Arrange(new Rect(0,100,100));// prepare scaling to 100x100Scaletransform scaleTrans = new Scaletransform();double scale = (double)100 / (double)Math.Max(bmpimg.PixelHeight,bmpimg.PixelWIDth);scaleTrans.CenterX = 0;scaleTrans.CenterY = 0;scaleTrans.ScaleX = scale;scaleTrans.ScaleY = scale;// renderWriteableBitmap writeableBitmap = new WriteableBitmap(100,100);writeableBitmap.Render(tmpimg,scaleTrans);writeableBitmap.InvalIDate();// final imageImage img = new Image();img.source = writeableBitmap;
我希望我不会错过任何愚蠢的东西,但它看起来对我来说没问题并做正确的事(除了记忆问题).还请记住,代码质量不应该是生产质量;它只是一个快速而肮脏的原型.
我注意到我并不孤单;我在Silverlight中找到了与图像处理相关的问题.我也知道我可以使用一些第三方库,在服务器上进行处理或者甚至自己编写一些东西,但我很惊讶Silverlight不提供任何基本的图像处理功能.鉴于Silverlight的定位,它似乎并不是一个不寻常的要求.
解决方法 你看过 WriteableBitmapEx project吗?它是一个开源项目,为WriteableBitmap类提供了大量的扩展方法.以下是调整大小的方法:BitmAPImage image = new BitmAPImage();image.SetSource(dialog.file.OpenRead());WriteableBitmap bitmap = new WriteableBitmap(image);WriteableBitmap resizedBitmap = bitmap.Resize(500,500,writeablebitmapextensions.Interpolation.Bilinear);// For uploadingbyte[] data = resizedBitmap.ToByteArray();总结
以上是内存溢出为你收集整理的使用WriteableBitmap调整Silverlight 3中的图像大小全部内容,希望文章能够帮你解决使用WriteableBitmap调整Silverlight 3中的图像大小所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)