gpt4 book ai didi

c# - 使 C# 保存 16 位位图而不进行位域压缩

转载 作者:行者123 更新时间:2023-11-30 19:02:50 26 4
gpt4 key购买 nike

当我做一个

b.Save(outputFilename, ImageFormat.Bmp);

其中 b 是一个 16 位位图,它是用位域压缩保存的。如何在不使用任何压缩的情况下使 C# 保存?

这是我对@Ben Voigt 发布的链接所做的:

ImageCodecInfo myImageCodecInfo;
Encoder myEncoder ;
EncoderParameter myEncoderParameter;
EncoderParameters myEncoderParameters;

myEncoder = Encoder.Compression;
myImageCodecInfo = GetEncoderInfo("image/bmp");
myEncoderParameters = new EncoderParameters(1);

myEncoderParameter = new EncoderParameter(myEncoder,
(long)EncoderValue.CompressionNone);
myEncoderParameters.Param[0] = myEncoderParameter;

b.Save(outputFilename, myImageCodecInfo, myEncoderParameters );

当我传递 8 位位图时,不使用压缩。但是当我传递 16 位 RGB 位图时,它仍然使用位域压缩。

最佳答案

Bitmap在windows中就是DIB。

“设备无关位图 (DIB) 是一种用于定义各种颜色分辨率的设备无关位图的格式。DIB 的主要目的是允许位图从一个设备移动到另一个设备(因此,设备-独立于名称的一部分)。DIB 是一种外部格式,与设备相关的位图相反,后者在系统中显示为位图对象(由应用程序创建...)。DIB 通常以图元文件(通常使用 StretchDIBits() 函数)、BMP 文件和剪贴板(CF_DIB 数据格式)。”

正如我们已经在评论中讨论的那样,BITFIELDS 压缩仅用于 16 位和 32 位 DIB,并且简单地描述了数据是如何打包的。对于 16 位 DIB,它可以定义绿色 channel 的分辨率(即 5:6:5 或 5:5:5),对于 32 位 DIB,它定义数据是存储在 RGB 还是BGR 顺序(以及,当使用 BMIHv4/5 header 时,是否使用 alpha channel 。)

只有一个原因。这是为了让 BMP 保持设备独立,即格式独立于它可能使用的设备。所以这意味着,它始终保持为 Windows 的 DIB 格式!格式通过压缩保持完整。

EncoderParameters codecParams = new EncoderParameters(1);
codecParams.Param[0] = new EncoderParameter(Encoder.Quality, 100L);
b.Save(outputFilename, myImageCodecInfo, codecparams );

这应该可以确保您的质量。

关于c# - 使 C# 保存 16 位位图而不进行位域压缩,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8608201/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com