我正在做一个隐写术项目(对我来说)。我已经完成了一些代码,但在考虑之后,我知道有更好的方法可以做我想要的。
此外 - 这是我第一次使用动态内存分配和二进制文件I / O.
以下是我在BMP图片中隐藏文本文件的代码:Link to code
另请注意,我没有使用LSB将消息存储在此代码中,而是替换alpha字节,假设其为每像素32位(bbp)图像。如果图像中有1,4,8,16,24 bpp,这将是非常灵活的另一个原因。例如,如果它是24 bbp,则alpha通道将是6位,而不是1个字节。
我的问题是使用结构将整个BMP读入内存的最佳方法是什么?
这就是我的看法:
我知道如何阅读两个标题,但ColorTable令我困惑,我不知道ColorTable的大小,或者图像中是否有一个。
此外,在PixelArray之后,维基百科说可能有ICC颜色配置文件,我怎么知道存在? Link to BMP File Format (Wikipedia)
另一件事,因为我需要知道标题信息以便知道PixelArray的起始位置,我需要进行多次读取,就像我上面所示,对吧?
很抱歉所有的问题都在一个,但我现在真的不确定该做什么。
答案 0 :(得分:3)
颜色表的大小由bV5ClrUsed
确定。
仅当bV5CSType == PROFILE_EMBEDDED
时,ICC颜色配置文件才会出现在文件中。
The documentation here提供所有信息。
然后,24位颜色表示8红色,8绿色,8蓝色,0阿尔法。您必须将其转换为32位RGBA才能拥有任何Alpha通道。
最后,Alpha通道会影响图像的显示,因此您无法将其自由地用于隐写术。你最好使用所有通道的最低有效位(并且可能不是所有像素)。