c++ - 在 C++ 中从 PNG 中读取 RGB 值

标签 c++ rgb fread

基本上,我正在尝试学习如何在没有库的情况下手动打开图像并查看 RGB 内容。

我想这样做,以便计算 RGB 的色相和饱和度以写回二维阵列图像。

到目前为止我得到了这个:

#include <iostream>
#include <stdio.h>      /* printf */
#include <math.h>       /* acos */
#include <fstream>      /* for file I/O */

using namespace std;

int main() {
        FILE* fp = NULL;
        fp = fopen("soccerball.png", "rb");
        cout << "done" << endl;
        return 0;
}

我知道这并不多,因为我更习惯使用 Python。但老实说,我不知道从哪里开始。而且在互联网上似乎根本没有这方面的例子。

所以我读了一张图片。现在我想要这样的东西:

img[Height][width]

所以我可以得到

img_r[h][w], img_g[h][w], img_b[h][w]

所以我可以使用这些值来计算相同格式的 Hue 二维数组。

img_hue[h][w]

谢谢

最佳答案

没有库就无法轻松打开 PNG 文件。

这是使用库打开 PNG 的示例...它已经有很多代码 http://zarb.org/~gc/html/libpng.html

问题是 PNG 是压缩格式。将 RGB 值压缩成特殊格式需要很多“数学魔法”。

.BMP(例如 Windows 位图)是您手动开始解析的一种非常简单的方法,如果您这样做是为了训练,但其他格式则需要一个库。

当然,您可以从头开始做所有事情...但是需要一段时间,而且根据您提出的问题,您离它还有一点距离。

关于c++ - 在 C++ 中从 PNG 中读取 RGB 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42150121/

相关文章:

c - 5 位 RGB (0, 31, 0) 至 16 位 RGB (0, 255, 0)

c - 从二进制文件读取二维数组并返回该数组的指针(在C中)

c++ - 增加网关的负载能力

c++ - 如何在可能是任何类的属性的 void 函数上创建 typedef?

c# - 条件格式——百分比到颜色的转换

javascript - 半秒后 RGB 换色器窗体刷新

r - 具有 613 列调查数据的稀疏 132MB 文件上的 fread segfault

c++ - eof 位 : before or after a read failure?

c++ - 是否可以使用 googletest 在基类中定义(纯虚拟)测试用例