确定上载图像的分辨率(DPI)

时间:2010-10-19 22:21:45

标签: c# silverlight image-processing

我有一个用于图像文件上传的组件。

但是,我还希望能够检查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文件上传中提取图像分辨率的任何想法?

2 个答案:

答案 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;