c# - 如何读取 8 位图像文件?
问题描述
我目前正在从事图像阅读和排序项目。我想问我如何读取 8 位图像文件?如果有帮助,我有一个可以读取 24 位图像文件的工作代码。该代码读取图像颜色代码并将它们添加到数组中。我想用 8 位图像文件做类似的事情。
var name = Path.GetFileNameWithoutExtension(path);
Bitmap image = new Bitmap(path);
image.Save(name + "_24bit.bmp", ImageFormat.Bmp);
using (FileStream file = new FileStream(name + "_24bit.bmp", FileMode.Open, FileAccess.Read))
{
byte[] b = new byte[file.Length];
file.Read(b, 0, (int)file.Length);
int width = BitConverter.ToInt32(b, 0x00012);
int height = BitConverter.ToInt32(b, 0x0016);
int points = (width * height);
//Taškus verčiame į spalvų kodus
int[] bs = new int[points];
int j = 54;
for (int i = 0; i < bs.Length; i++)
{
bs[i] = (((b[j + 2] << 8) + b[j + 1]) << 8) + b[j];
j += 3;
}
//
}
解决方案
8 位图像文件的每个像素仅由 1 个字节表示,而不是 24 位中的 3 个字节。
您需要确定它是 8 位颜色还是 8 位灰度。
8 位颜色被打包为 RRRGGGBB,例如红色 3 位,绿色 3 位,蓝色 2 位。灰度图像仅显示像素的亮度。
实际上,可以将 24 位彩色图像视为 3 个 8 位灰度通道,每个通道分配给每种颜色(红、绿、蓝)。
推荐阅读
- csv - 如何在pyspark中读取具有不同模式的多个csv文件?
- java - 我将如何在 Java 中编写一个打印出小于 n 的完美数字的函数?
- java - 为什么我的 String 方法允许返回 String 和 int 的值?
- google-cloud-platform - 无法使用 gcloud 将私有 IP (VPC) 添加到新的 Google Cloud SQL 实例
- excel - 将 CheckBox Control dim 设置为 UserForm CheckBox
- android - 如何通知用户更新现有应用程序?
- c# - 如何使用 DevShock Smpp 发送有效负载消息
- mysql - 无法在 docker 外部部署 mysql
- javascript - 在 JS 文件中导出默认的两个函数?
- java - java.lang.LinkageError:javax.wsdl.extensions.soap12.SOAP12HeaderFault:如何调试?