将浮点 RGBA 位图转换为标准 Dotnet 位图
我正在尝试使用 FreeImage.Net 库打开图像并将其转换为标准位图,但要么一定是我遗漏了一个步骤,要么 FreeImage 根本无法将浮点 RGBA 转换为 32BPP RGBA:
FreeImageBitmap fib = new FreeImageBitmap("C:\\test.exr");
Console.WriteLine(fib.ImageType); //FIT_RGBAF
fib.ConvertType(FREE_IMAGE_TYPE.FIT_BITMAP, true); //returns False
转换失败:
无法从类型 12 转换为类型 1;不存在这样的转换。
我需要将其作为 32BPP RGBA 位图,只是为了能够将其转换为 System.Drawing.Bitmap,因此我可以使用 GDI+ 来绘制它。如果有必要,我愿意使用不同的图像库,或者如果有人认为在那里可以找到解决方案,我愿意考虑使用 WPF 而不是 Winforms。
我上传了一个示例浮点 EXR 进行测试: http://dl.dropbox.com /u/2817180/test.exr
I'm trying to use the FreeImage.Net library to open the image and convert it to a standard bitmap, but either there must be a step I'm missing, or FreeImage simply can not convert floating point RGBA to 32BPP RGBA:
FreeImageBitmap fib = new FreeImageBitmap("C:\\test.exr");
Console.WriteLine(fib.ImageType); //FIT_RGBAF
fib.ConvertType(FREE_IMAGE_TYPE.FIT_BITMAP, true); //returns False
Conversion fails:
Can not convert from type 12 to type 1; No such conversion exists.
I need this as a 32BPP RGBA Bitmap solely for the purpose of being able to convert it into a System.Drawing.Bitmap
, so I may draw it using GDI+. I'm willing to use a different image library if necessary, or to consider WPF over Winforms if anyone thinks a solution will be found there.
I've uploaded an example floating point EXR for testing: http://dl.dropbox.com/u/2817180/test.exr
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
正如 Niko 所说,你应该手动完成。使用不安全的代码和指针来固定内存缓冲区并使其不可移动,您的例程将执行速度快且易于编写。
如果您只有一种源格式和一种目标格式,则更是如此。
AS Niko said, you should do it manually. Using unsafe code, and pointers that would PIN your memory buffers and make it unmovable, your routine will be both fast in execution and easy to write.
More so if you are having just one source and one target format.