Сохранить изображение в памяти, а не на диске, используя C API в imagemagik? - PullRequest
1 голос
/ 28 июня 2019

У меня есть эта командная строка:

 \ImageMagick-7.0.8-Q16\magick.exe -background transparent -fill white -font Amiri-Bold -pointsize 100 -kerning 5.0 -gravity center label:@c:\users\foo\appdata\local\temp\tmpahpcw2.txt -type truecolormatte PNG32:c:\users\foo\appdata\local\temp\tmp1ogyjm.png 

, как вы видите, она берет строку из файла и сохраняет ее в png-файле.
Мой вопрос: могу ли я сделать ту же операцию, используя C API?(я думаю, да), но важная проблема заключается не в использовании файлов на диске только в памяти.
Спасибо за помощь

1 Ответ

2 голосов
/ 01 июля 2019

Если вы хотите сохранить файл изображения PNG в памяти, используйте MagickGetImageBlob.

size_t length;
unsigned char * address;
address = MagickGetImageBlob(wand, &length);
if (address != (unsigned char *)NULL) {
  printf("Wrote %zu bytes of data to %p address\n", length, address);
}

Если вы хотите сохранить пиксель data в памяти, используйте MagickExportImagePixels.

MagickBooleanType status;
size_t width = MagickGetImageWidth(wand);
size_t height = MagickGetImageHeight(wand);
size_t channels = 3; // "RGB"
size_t data_length = sizeof(unsigned char) * channels * width * height;
unsigned char * data = malloc(data_length);
status = MagickExportImagePixels(wand, 0, 0, width, height, "RGB", CharPixel, data);
if (status == MagickTrue) {
  fprintf(stdout, "Wrote %zu bytes of data to %p address\n", data_length, data);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...