【发布时间】:2018-02-16 16:39:55
【问题描述】:
我一直在寻找 C++ 中的代码,它可以获取 png 文件的所有像素的 RGB 值。
所以我通过互联网搜索了很多,发现了不同的方法来做这样的事情,比如使用 libpng 、 OpenCV 、 Magick++ 、 CImg 等,我只是决定使用 CImg (主要是因为我不知道如何使用 OpenCV,尽管我在 Code::Blocks 中搜索了很多关于如何安装和使用它的信息,它与我从 Sorceforge 下载的安装程序 mingw64 有关,在下载一些文件的过程中不断给我错误,而关于其余部分,我只是找不到与 Code::Blocks 兼容的适当头文件(如 Magick++.h)......所以如果你认为其中一些会比 CImg.h 更好更简单,如果您提供标题的下载链接或任何其他必要的东西,我将不胜感激)
这是我在 Cimg 中找到的代码:
#include <windows.h>
#include <iostream>
using namespace std;
#include <CImg.h>
using namespace cimg_library;
int main()
{
CImg<unsigned char>src("twittericon.png");
int width = src.width();
int height = src.height();
cout << width << "x" << height << endl;
for (int r = 0; r < height; r++)
for (int c = 0; c < width; c++)
cout << "(" << r << "," << c << ") ="
<< " R" << (int)src(c,r,0,0)
<< " G" << (int)src(c,r,0,1)
<< " B" << (int)src(c,r,0,2) << endl;
return 0;
}
但问题是在运行程序后,它给了我错误: CImg::load(): 无法识别文件“twittericon.png”的格式
我应该怎么处理这个错误?
顺便问一下,你知道有什么更好的方法来读取 png 文件的这些 RGB 值吗?如果你这样做,你能不能也给我一点指导?谢谢。
【问题讨论】:
-
Google 搜索:“MSDN SetDIBitsToDevice”,单击第一个链接,转到页面底部的表格并将库包含在链接器设置中。 MSDN 站点上列出了所有 Win32API 函数以及所需的标头和库。
-
我添加了这一行:#include
我下载了 Gdi32.lib 并将其添加到我的编译器设置中的链接器设置中。现在运行程序没有错误,但之后,它给出了这个错误: CImg ::load(): Failed to identify format of file 'twittericon.png' 现在我该怎么办?它不适用于png文件吗? -
您必须安装
libpng才能读取/写入PNG 文件。不过,我怀疑您最好安装 ImageMagick,因为 CImg 可以使用它为您读取大多数文件格式。请记住在安装 ImageMagick 时勾选选项“安装旧版工具”。 -
你能帮我下载哪一个吗?如果您需要,我正在使用 Windows 10、C++ 和 Code::Blocks。 imagemagick.org/script/install-source.php
-
你不需要安装源。您可以使用现成的二进制文件,这更容易。