我一直在使用java中的一些图像处理工具,并想知道如何创建自己的图像格式(具有自己的文件扩展名和标题)。
假设我正在尝试将2个jpeg图像存储到扩展名为.abcde
的新文件中我如何处理此问题并修改文件头? 我做了一些研究并找到了这个,但它没有任何形式的例子。 https://gamedevelopment.tutsplus.com/tutorials/create-custom-binary-file-formats-for-your-games-data--gamedev-206
任何建议/参考/例子都会很棒,谢谢。
答案 0 :(得分:2)
好。在这里你应该问自己一个问题 - 什么是二进制文件?它是某种类型的“盒子”,包含8位值(0-255范围)。实际上图像是什么?相同。但是图像中的数据是专门存储的。例如,如果你看一下位图(* .BMP文件),你会看到它包含RGB值(它实际上取决于颜色深度,但我们现在讨论的是24位颜色)。那么,这意味着什么?这意味着每个像素以3个字节(24位)存储,用于红绿色和蓝色值。 EG:0x00 0x00 0x00 - 这是十六进制表示的黑色像素 0xFF 0xFF 0xFF - 白色。 但是以这种方式存储图像数据是非常低效的。例如,1024x1024图像将是1024 * 1024 * 3 = 3145728字节!!或者3个MEGABYTES。这不包括alpha通道,它也存储一个字节。 所以,这里有数据压缩,它可能是有损或无损的。如果您在十六进制编辑器中打开例如PNG文件,您将看到DEFLATE压缩数据(LZ77 +霍夫曼编码)。它是无损的。 GIF文件使用LZW压缩,现在效率很低。有许多非常好的图像格式,如FLIF或BPG,它们比PNG和JPEG更好地压缩图像。 所以,如果你想创建自己的文件格式,你可以只创建一个原始像素容器文件(如BMP或PCX),或压缩像素文件(这里你应该编写一个自定义数据压缩算法,C或C ++最适合这个目的)。