在C ++中从PNG读取RGB值

时间:2017-02-10 01:41:43

标签: c++ rgb fread

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

我想这样做,所以我可以计算RGB的色调和饱和度来回写2D数组图像。

到目前为止,我已经得到了这个:

#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 [高度] [宽度]

所以我可以

  

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

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

  

img_hue [h] [w]

由于

2 个答案:

答案 0 :(得分:0)

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

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

事实是PNG是压缩格式。有很多&#34; mathemagics&#34;发生将RGB值压缩成特殊格式。

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

当然,你可以从零开始做所有事情......但需要一段时间,而你所做的问题,你距离它还有一段距离。

答案 1 :(得分:0)

Lode Vandevenne的文件lodePNG

https://github.com/MalcolmMcLean/babyxrc/blob/master/src/lodepng.c

是从头开始编写的PNG解析器的示例。

您可以根据文件格式编写自己的解析器,但它有点牵扯。作为第一个镜头,看看你是否可以打开二进制文件并检测它是否是PNG。