не существует подходящей функции преобразования из «Magick :: Color» в «MagickCore :: Quantum» - PullRequest
0 голосов
/ 29 октября 2019

Я уже знаю, почему он выдает эту ошибку по коду. Проблема в том, что я начал использовать саму библиотеку сегодня и, следуя руководству, нашел это.

Я установил версию библиотеки "ImageMagick-7.0.9-1-Q16-x64-dll" и попыталсянайдите кратчайший код, который дал эту ошибку, а именно:

#include <Magick++.h>
int main(){
  Magick::Quantum result = Magick::Color("black");
}

Учитывая данное руководство (следующее), метод, который преобразует из Magick :: Color в Magic :: Quantum, должен существовать

// Example of using an image pixel cache
Image my_image("640x480", "white"); // we'll use the 'my_image' object in this example
my_image.modifyImage(); // Ensure that there is only one reference to
// underlying image; if this is not done, then the
// image pixels *may* remain unmodified. [???]
Pixels my_pixel_cache(my_image); // allocate an image pixel cache associated with my_image
Quantum* pixels; // 'pixels' is a pointer to a Quantum array
// define the view area that will be accessed via the image pixel cache
int start_x = 10, start_y = 20, size_x = 200, size_y = 100;
// return a pointer to the pixels of the defined pixel cache
pixels = my_pixel_cache.get(start_x, start_y, size_x, size_y);
// set the color of the first pixel from the pixel cache to black (x=10, y=20 on my_image)
*pixels = Color("black");
// set to green the pixel 200 from the pixel cache:
// this pixel is located at x=0, y=1 in the pixel cache (x=10, y=21 on my_image)
*(pixels+200) = Color("green");
// now that the operations on my_pixel_cache have been finalized
// ensure that the pixel cache is transferred back to my_image
my_pixel_cache.sync();

, которая дает эту ошибку (не существует подходящей функции преобразования из "Magick :: Color" в "MagickCore :: Quantum") в следующих строках

*pixels = Color("black");
*(pixels+200) = Color("green");

1 Ответ

0 голосов
/ 29 октября 2019

Я полагаю, вы путаете тип данных со структурой. pixels представляет непрерывный список Quantum деталей.

Предполагается, что мы работаем с цветовым пространством RGB. Вам нужно будет установить каждую цветную часть.

Color black("black");
*(pixels + 0) = black.quantumRed();
*(pixels + 1) = black.quantumGreen();
*(pixels + 2) = black.quantumBlue();

Чтобы установить 200-й пиксель, вам нужно умножить смещение на количество частей на пиксель.

Color green("green");
int offset = 199 * 3; // First pixel starts at 0, and 3 parts (Red, Green, Blue)
*(pixels + offset + 0) = green.quantumRed();
*(pixels + offset + 1) = green.quantumGreen();
*(pixels + offset + 2) = green.quantumBlue();
...