生成低位深度的图像文件?
bpp = 每像素位数,因此 32bpp 表示 R/G/B/A 的 8/8/8/8。
就像.NET 有一个枚举“System.Drawing.Imaging.PixelFormat”。
现在,一旦我的图形有了位图或图像对象,如何将其保存到文件/我将使用什么格式?
什么图像文件格式(JPEG/GIF/PNG)支持低位深度,如 16bpp 或 8bpp(而不是通常的 32bpp 或 24bpp)
bpp = bits per pixel, so 32bpp means 8/8/8/8 for R/G/B/A.
Like .NET has an enum for these "System.Drawing.Imaging.PixelFormat".
Now once I have a Bitmap or Image object with my graphics, how would I save it to a file / what format would I use?
What image file format (JPEG/GIF/PNG) supports low bit-depths like 16bpp or 8bpp (instead of the usual 32bpp or 24bpp)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
我不认为其他人的回答测试了他们的代码,因为 GDI+ PNG 不支持 Encoder.BitDepth EncoderParameter。 事实上,唯一能做到这一点的编解码器是 TIFF。
您需要在保存之前更改图像的 PixelFormat 才能对输出产生任何影响。 这并不总是产生您期望的 PixelFormat。 请参阅我的帖子 了解有关 PixelFormat 变成什么的更多信息。
至于 PixelFormat 转换,类似以下内容将起作用:
不幸的是,这些转换可能会产生一些非常糟糕的输出。 在执行有损转换(高位深度到低位深度)的情况下尤其如此。
I don't think the other's answering tested their code as GDI+ PNG does not support the Encoder.BitDepth EncoderParameter. In fact, the only Codec which does is TIFF.
You need to change your image's PixelFormat before saving in order to have any effect out the output. This won't always produce the PixelFormat you expect. See my post here for more information on which PixelFormats turn into what.
As for PixelFormat conversions, something like the following will work:
Unfortunately, these conversions can produce some really bad output. This is especially true in the case where you are performing a lossy conversion (high bit depth to lower).
每像素一位
这仅从 .Net 生成尽可能小的 PNG。 请注意,它是黑白的 - 甚至不是灰度。 对于文档很有用。
消费者代码:
Make1bpp
这是PNG编码器关心的
One bit per pixel
This produces the smallest possible PNG from .Net only. Note that it is b&w - not even grayscale. Useful for documents.
Consumer code:
Make1bpp
This is what the PNG encoder cares about
尝试这个:
Try this:
所有图像格式都有效支持低位深度。 如果不需要,您只需保留最后的位即可。 GIF仅支持低色; 您只能使用 256 种颜色。
All image formats effectively support low bit depths. You just leave the last bits unused, if not needed. GIF only supports low-color; you're restricted to 256 colors.
未经测试的代码 -
查看 System.Drawing.Imaging 命名空间并尝试一下 Encoder.xxx 参数设置和 image.Save 方法。 HTH。
更新
还值得注意的是,如果您想要小图像(低字节数),您可以尝试保存为 JPEG 并使用 Encoder. Compression 压缩,但会以图像质量为代价。
Untested code -
Look at the System.Drawing.Imaging namespace and have a play with the Encoder.xxx parameter settings and the image.Save method. HTH.
Update
also worth noting that if you want a small image (low byte count) you can try saving as JPEG an using Encoder.Compression compression but at image quality cost.