CImg: не удалось распознать формат jpg

#include <iostream>
#include <stdlib.h>
#include "CImg.h"

using namespace cimg_library;
using namespace std;

int main(){
CImg<unsigned char> image("lena.jpg"), visu(500,400,1,3,0);

const unsigned char red[] = { 255,0,0 }, green[] = { 0,255,0 }, blue[] = { 0,0,255 };



return 0;}

Когда я компилирую этот код, появляется ошибка: CImg::load(): не удалось распознать формат файла "lena.jpg". Есть предложения?

Я установил imageMagick, но ошибка все еще происходит.

3 ответа

Чтобы включить поддержку собственных файлов JPG в CImg, поставьте это перед включением CImg.h:

#define cimg_use_jpeg
#include "CImg.h"
....

и свяжите ваш код с libjpeg библиотека. Это работает безупречно для меня. Если вы не используете это, CImg попытается выполнить внешний вызов инструмента преобразования ImageMagick для загрузки файла, что не является самым чистым решением. Использование libjpeg внутри CImg определенно лучше. Это работает так же для других форматов изображений (TIFF, PNG, ...).

Вы пробовали какие-либо другие файлы изображений, кроме "lena.jpg"? "Lena.jpg" находится в том же каталоге, что и текущая программа? Какой компилятор вы используете?

Работает ли этот пример (не имеет смысла, если бы он работал)?

#include "CImg.h"
using namespace cimg_library;
int main() {
  CImg<unsigned char> image("lena.jpg"), visu(500,400,1,3,0);
  const unsigned char red[] = { 255,0,0 }, green[] = { 0,255,0 }, blue[] = { 0,0,255 };
  image.blur(2.5);
  CImgDisplay main_disp(image,"Click a point"), draw_disp(visu,"Intensity profile");
  while (!main_disp.is_closed() && !draw_disp.is_closed()) {
    main_disp.wait();
    if (main_disp.button() && main_disp.mouse_y()>=0) {
      const int y = main_disp.mouse_y();
      visu.fill(0).draw_graph(image.get_crop(0,y,0,0,image.width()-1,y,0,0),red,1,1,0,255,0);
      visu.draw_graph(image.get_crop(0,y,0,1,image.width()-1,y,0,1),green,1,1,0,255,0);
      visu.draw_graph(image.get_crop(0,y,0,2,image.width()-1,y,0,2),blue,1,1,0,255,0).display(draw_disp);
      }
    }
  return 0;
}

Источник: http://cimg.eu/reference/group__cimg__tutorial.html

Я заметил, что в документации сказано, что она поддерживает только jpg, если установлена ​​программа imageMagick. Возможно, вы сделали что-то не так, и она установлена ​​неправильно?

РЕДАКТИРОВАТЬ:

Это работает?

#include "CImg.h"
using namespace cimg_library;
int main() {
  CImg<unsigned char> img(640,400,1,3);  // Define a 640x400 color image with 8 bits per color component.
  img.fill(0);                           // Set pixel values to 0 (color : black)
  unsigned char purple[] = { 255,0,255 };        // Define a purple color
  img.draw_text(100,100,"Hello World",purple); // Draw a purple "Hello world" at coordinates (100,100).
  img.display("My first CImg code");             // Display the image in a display window.
  return 0;
}

Для меня работало использование абсолютного пути к файлу, а не только имени файла:

Ex. Измените это: изображение CImg ("lena.jpg"), visu(500,400,1,3,0);

на это: изображение CImg ("C: \ Users \ youruser \ Desktop \ lena.jpg"), visu (500 400 1, 3,0);

Конечно, этот путь будет отличаться в зависимости от того, где у вас есть файл.

Другие вопросы по тегам