我有一个用于图像文件上传的组件。
但是,我还希望能够检查DPI设置,因为这些图像最终将被打印并在纸上提交。
在ASP.net中,我通常可以这样做:
using (var rawBitmap = new Bitmap(postedFile.InputStream)){
var dpi = (decimal)rawBitmap.VerticalResolution/bitmap.Height;
// do other stuff.
}
但是,在Silverlight中,为了做到这一点,我无法访问相同的库(也就是说,这是我第一次尝试使用Silverlight,所以如果有办法让这些dll进入,我就是所有这一切,但我无法导入我的实用程序包装。)
我见过很多关于FJcore的建议(imagetools也包装了这个库),一个JPEG编码/解码工具。理论上,人们将JPEG流加载到解码器中并获取信息。
我尝试过使用FJcore的方法,但我从photoshop中保存的所有文件似乎都缺少指示文件星号的正确标题,这会导致解码器失败。我也用他们的单元测试证实了这个问题。
有关如何从Silverlight文件上传中提取图像分辨率的任何想法?
答案 0 :(得分:3)
图像的DPI并不总是存储在图像上。这通常是在扫描仪(或相机)捕获期间保存为元数据的额外属性。您实际上可以看到,如果使用Bitmap
在C#中加载JPEG并再次保存,则DPI属性将丢失并设置为默认值96。
所以很遗憾,这不是一个总是可靠的选择。我认为没有机会为所有图像获取它。事实上,DPI与扫描仪无法创建的图片无关。
答案 1 :(得分:0)
尝试使用F J核心组件在silverlight中查找图像的DPI
FileStream stream = imageFiles.OpenRead();
DecodedJpeg jpegImage = new JpegDecoder(stream).Decode();
int imageDpi = jpegImage.Image.DensityX;