c# - 生成低位深度的图像文件?

标签 c# vb.net bitmap imaging

bpp = 每像素位数,因此 32bpp 表示 R/G/B/A 为 8/8/8/8。

就像 .NET 对这些“System.Drawing.Imaging.PixelFormat”有一个枚举。

现在,一旦我有了包含我的图形的位图图像对象,我将如何将它保存到一个文件/我将采用什么格式有什么用?

什么图像文件格式 (JPEG/GIF/PNG) 支持低位深度,如 16bpp 或 8bpp (而不是通常的 32bpp 或 24bpp)

最佳答案

我不认为其他人的回答测试了他们的代码,因为 GDI+ PNG 不支持 Encoder.BitDepth EncoderParameter。事实上,唯一的编解码器是 TIFF。

您需要在保存之前更改图像的 PixelFormat 才能对输出产生任何影响。这不会总是产生您期望的 PixelFormat。参见 my post here有关 PixelFormats 变成什么的更多信息。

对于 PixelFormat 转换,类似下面的方法会起作用:

private Bitmap ChangePixelFormat(Bitmap inputImage, PixelFormat newFormat)
{
  Bitmap bmp = new Bitmap(inputImage.Width, inputImage.Height, newFormat);
  using (Graphics g = Graphics.FromImage(bmp))
  {
    g.DrawImage(inputImage, 0, 0);
  }
  return bmp;
}

不幸的是,这些转换会产生一些非常糟糕的输出。在执行有损转换(从高位深度到低位深度)的情况下尤其如此。

关于c# - 生成低位深度的图像文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/483014/

相关文章:

c# - 访问 ASP.NET 表中的控件

android - 将 byteArray 转换为 android 中的位图?

c# - 从未完成的任务会怎样?他们是否妥善处置?

.net - 将此类扩展为在 ListView 中撤消/重做

c# - 第二次保存到上下文时继续获取 "A second operation started on this context before a previous operation completed"。

vb.net - 无法将标签的背景色设置为透明

Android ImageView 使应用变慢

android - java.lang.IllegalStateException?

c# - 如何覆盖数据网格列标题的自动创建?

c# - 在 Blazor 服务器端应用程序中获取用户代理和 IP