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

C# 确定上载图像的分辨率(DPI),c#,silverlight,image-processing,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中,我无法访问

我有一个图像文件上传组件

但是,我希望也能够检查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也包装了这个库)的建议,FJcore是一个JPEG编码/解码工具。理论上,我们可以将JPEG流加载到解码器中并将信息输出

我已经尝试使用FJcore的方法,但是我从photoshop中保存的所有文件似乎都缺少正确的标题,该标题指示文件的星形,这导致解码器失败。我还通过他们的单元测试确认了这个问题


关于如何从silverlight上传的文件中提取图像分辨率,您有什么想法吗?

图像的DPI并不总是存储在图像上。这通常是扫描仪(或相机)捕获期间保存为元数据的额外属性。实际上,您可以看到,如果使用
位图
在C#中加载JPEG并再次保存,DPI属性将丢失并设置为默认值96


因此,不幸的是,这不是一个总是可靠的选择。我不认为有任何机会得到它的所有图像。DPI实际上与非扫描仪创建的图片无关。

图像的DPI并不总是存储在图像上。这通常是扫描仪(或相机)捕获期间保存为元数据的额外属性。实际上,您可以看到,如果使用
位图
在C#中加载JPEG并再次保存,DPI属性将丢失并设置为默认值96


因此,不幸的是,这不是一个总是可靠的选择。我不认为有任何机会得到它的所有图像。DPI实际上与不是由扫描仪创建的图片无关。

尝试使用F J core组件在silverlight中查找图像的DPI

FileStream stream = imageFiles.OpenRead();
DecodedJpeg jpegImage = new JpegDecoder(stream).Decode();
int imageDpi = jpegImage.Image.DensityX;

尝试使用F J core程序集在silverlight中查找图像的DPI

FileStream stream = imageFiles.OpenRead();
DecodedJpeg jpegImage = new JpegDecoder(stream).Decode();
int imageDpi = jpegImage.Image.DensityX;

数码相机经常使用。不幸的是,它基本上只支持JPEG和TIFF图像:(wiki页面上有一些其他格式的链接。YMMV和have fun。我并不完全像DPI在相机上所具有的那样:-)我曾认为位图甚至有DPI属性是奇怪的,很好地清除了这一点。在我们的例子中,保留DPI并不是很重要,但提取打印大小却很重要。我希望有另一个库来解析元信息,但我想这就是它的方式。DPI依赖于设备上下文,但对于相机来说毫无意义。数码相机经常使用。不幸的是,它基本上只支持JPEG和TIFF图像:(wiki页面上有一些其他格式的链接。YMMV和have fun。我并不完全像DPI在相机上所具有的那样:-)我曾认为位图甚至有DPI属性是奇怪的,很好地清除了这一点。在我们的例子中,保留DPI并不是很重要,但提取打印大小却很重要。我希望有另一个库来解析元信息,但我想这就是它的方式。DPI依赖于设备上下文,但对于相机来说毫无意义。