网站推广免费 优帮云,建设艺术网站需要多少钱,python基础教程入门,宁波自己建网站用.NET解索尼相机ARW格式照片目前常用的照片格式是 .jpg#xff0c;它只能提供 8bit的色彩深度#xff0c;而目前主流的相机都能提供高达 12bit- 14bit的色彩深度#xff0c;动态范围和后期处理能力也大大增加#xff0c;这也是为什么不少摄影爱好者会优先使用相机提供原始… 用.NET解索尼相机ARW格式照片目前常用的照片格式是 .jpg它只能提供 8bit的色彩深度而目前主流的相机都能提供高达 12bit- 14bit的色彩深度动态范围和后期处理能力也大大增加这也是为什么不少摄影爱好者会优先使用相机提供原始格式也就是 raw格式它记录了最多的信息。但相机的 raw格式是厂商提供的不像 jpg格式厂商与厂商之间的格式不一样如索尼相机一般用 .ARW格式、佳能相机用 .CR2格式等等。正常读 raw格式文件会用 Lightroom、 CaptureOne、 CameraRaw之类的软件。但如果拿着相机拍了不少漂亮相片回家自己想来点“简单”骚操作转个码然后用自己搭的 NAS集成一下数据什么的就需要用到最拿手的 C#了。想象中读 ARW格式的过程代码我也不太确定要怎么写也许……代码就这样using var bmp Bitmap.FromFile(D:\A6000\2019-4-6\DSC05458.ARW);不出所料果然读不了报错了异常信息如下System.OutOfMemoryException: Out of memory. at System.Drawing.Image.FromFile(String filename, Boolean useEmbeddedColorManagement) at System.Drawing.Image.FromFile(String filename) at UserQuery.Main() in C:\Users\sdfly\AppData\Local\Temp\LINQPad6\_xonxdhlt\pzztkn\LINQPadQuery:line 3请注意这里抛的是 OutOfMemoryException看起来很奇怪——这里有必要说一句根据微软官方提供的文档https://docs.microsoft.com/en-us/dotnet/api/system.drawing.image.fromfile?viewnetframework-4.8如果 GDI不支持文件的像素格式则就会抛 OutOfMemoryException。探寻解决办法经过一翻 Google和 Stackoverflow的探索发现原来索尼官方提供了 ARW格式的解码器下载地址如下http://ids.update.sony.net/microsoft/SRD20_Installer0810a.exe下载后安装即可之后可以在注册表中查看一下注册表位置如下是 计算机\HKEY_CLASSES_ROOT\CLSID\{7ED96837-96F0-4812-B211-F13C24117ED3}\Instance\{C17F7FAD-D98F-4B2A-8FF2-90E8A5CC0253}发现该组件确实安装正确 安装完之后再使用 GDI的 API调用一下发现仍然会报一样的错。重启一下还是一样调用 ImageCodecInfo.GetImageDecoders()就能发现其实在“内置”的解码器里面并没有索尼 ARW文件*.BMP;*.DIB;*.RLE*.JPG;*.JPEG;*.JPE;*.JFIF*.GIF*.EMF*.WMF*.TIF;*.TIFF*.PNG*.ICO又经过一翻搜寻原来索尼提供的这个安装包是集成于 WIC也就是 WindowsImagingComponents因为必须要用 WIC的 API SharpDX.Direct2D1和 WPF都是基于 WIC按我的习惯肯定会用 SharpDX但这里为了方便大家我使用了 WPF作为博客示例var decoder BitmapDecoder.Create(new Uri(D:\A6000\2019-4-6\DSC05458.ARW), BitmapCreateOptions.None, BitmapCacheOption.Default);var transformedBitmap new TransformedBitmap(decoder.Frames[0], new ScaleTransform(0.3, 0.3));var jpg new JpegBitmapEncoder();jpg.Frames.Add(System.Windows.Media.Imaging.BitmapFrame.Create(transformedBitmap));using var stream new MemoryStream();jpg.Save(stream);Util.Image(stream.ToArray()).Dump();该代码成功将索尼的 ARW文件转换为 JPG格式注意代码中有个 0.3,0.3是为了显示效果我将 24M像素的原图缩放了为 30%x30%运行效果如下 总结事实上除了厂商提供的库还有许多第三方机构也提供解 raw格式的库如 libraw等等。由于我 WIC用得比较熟悉我就用 WIC来解了。本文用到的索尼 ARW文件可以在我的百度网盘中下载https://pan.baidu.com/s/1kTTpwMHIiprBK2hJGPajRw 提取码: 8vpr。喜欢的朋友 请关注我的微信公众号【DotNet骚操作】