我发现了一个我无法调试但我想解决的有趣的事情,因为它对于开发我需要的小工具至关重要。
基本上所有都归结为我加载到一个SDL_Surface
加载了IMG_Load("filename.png")
. 代码的骨架是
surface = IMG_Load("filename.png");
然后这个工具应该通过应用颜色图(这只是一个)将这个表面逐个像素地复制到另一个表面unordered_map<u32,u32>
。这基本上是可行的,但是许多像素的 RGB 值略有变化,因此这种替换失败了。
例如,当像素 255,255,255 正确存储为表面中的 0xFFFFFFFF 时,另一个像素,例如 81,60,48 变为 82,62,51。我考虑过伽玛校正,但图像本身没有被绘制,因为颜色开关是在两个表面之前应用的,而后者在之后被绘制到纹理上。
有什么线索吗?我没有兴趣为我的问题找到另一种解决方案,因为我需要能够使用固定地图进行精确的像素颜色切换,我只想了解为什么会发生这种情况(因为 PNG 应该只包含确切的值,被无损)并解决它。