【发布时间】:2014-12-15 08:39:01
【问题描述】:
我需要为.img 二进制图像文件制定压缩算法。图像可以说是 512x512。我正在使用BinaryReader 逐像素获取二进制文件,并将其保存在short[,] 中。它是这样的:
br1 = new BinaryReader(File.Open(openFileDialog1.FileName, FileMode.Open));
short[,] num = new short[512, 512];
for (int i = 0; i < 512; i++)
for (int j = 0; j < 512; j++)
{
num[i, j] = (short)br1.ReadInt16();
}
我不明白如何使用调色板(导入的 .pal 文件)将 [-2048,2047] 之间的值转换为位图。
我非常感谢任何帮助、建议、代码、教程等。 提前致谢。
【问题讨论】:
-
您需要做的第一件事是确定要创建的图像格式。有一些基于调色板的格式将(8 位或 16 位)指针保存到调色板结构中,还有一些基于像素的格式,它在每个像素(24 位)中保存 RGB 值。后者更容易创建。在任何一种情况下,您还需要了解二进制数据所代表的颜色含义。 - 不管你多么“努力”,你都无法超越 PNG 或 JPG 压缩,不过..
-
我想创建基于调色板的图片,我拥有的信息是 [-2048, 2047] 之间的值。我需要这部分,以便在开始使用我的算法压缩它之前,我可以在 pictureBox 中显示 .img 二进制文件。
-
好的,但是这些值是什么意思?灰度值?
-
嗯,在发布我的答案后,我注意到您正在谈论一个 .pal 文件。所以如果你真的想要一个颜色文件,这个文件必须映射到值。它有多大?你知道什么吗,比如条目的类型和数量?请注意,对调色板大小的所有限制仍然适用,无论它们指向哪种颜色:最多 256 种颜色是可能的!
标签: c# compression color-palette