ImageMagick в C #: получить байтовый массив из вызова Convert? - PullRequest
3 голосов
/ 13 января 2011

Я пытаюсь использовать COM-компонент ImageMagickObject, поставляемый с установщиком Windows для ImageMagick, импортированный в мой проект C # в качестве ссылки на COM. До сих пор я был в состоянии использовать его для преобразования изображений из одного файла на диске в другой файл на диске. Я пытаюсь заставить его преобразовать файл в память и вернуть его в байтовом массиве, как показано в файле ArrayTest.vbs, входящем в комплект библиотеки. Кто-нибудь успешно делал это раньше? Для этой функции не хватает документации ...

Мой код:

MagickImageClass _magic = new MagickImageClass();
object[] myarray = new object[1];
myarray[0] = "JPEG:";

object[] args = new object[] { tbFilename.Text, "-colorspace", "cmyk", "-resize", "50%", myarray };
var result = _magic.Convert(ref args);

Их образец из ArrayTest.vbs:

Dim img
Dim myarray(1)

Set img = CreateObject("ImageMagickObject.MagickImage.1")
myarray(0)="8BIM:"

msgs = img.Convert("null:","-profile","8BIMTEXT:iptctext.txt",myarray)

Если вы не знакомы с ImageMagick, «null:» - это встроенный тип, указывающий нулевое изображение. «-profile» и «8BIM: iptctext.txt» - это параметры командной строки, передаваемые вызову Convert, и мой массив - это, по сути, вывод. В их примере myarray заканчивается байтовым массивом недавно преобразованного изображения. В моем коде myarray не изменился. Помогите !!

Ответы [ 2 ]

0 голосов
/ 17 февраля 2011

Подпись для метода, который вы вызываете из источника ImageMagickObject:

[ vararg, id( 6 ) ] HRESULT Convert([ in, out, satype( VARIANT ) ] SAFEARRAY * *pArrayVar, [ out, retval ] VARIANT * pVar );

Кажется, это означает, что он должен принимать два аргумента, один из которых возвращает возвращаемое значение, но не компилируетсяс чем-то, кроме одного ref object[] аргумента.

Я не очень знаком с программированием COM, поэтому, надеюсь, кто-то более опытный заметит это и может помочь вам найти правильный код C #.

Кроме того (как я уверен, вы заметили), сигнатура метода, обнаруженная Visual Studio, подразумевает, что Convert принимает аргументы в форме params object[], но он будет компилироваться только с одним аргументом ref object[] (даже если он помечает его).как ошибка перед компиляцией).

0 голосов
/ 07 февраля 2011

ImageMagickObject предназначен для предоставления эквивалентных функций для большинства двоичных файлов ImageMagick без дополнительных затрат на создание процесса для выполнения двоичных файлов.В случае «Преобразования» в случае успеха нет ожидаемого вывода (или возвращаемого значения ImageMagickObject).

Из того, что я могу сказать, у вас есть два варианта, если вы хотите это из C #:

  1. Преобразуйте изображение во временный файл и затем прочитайте его, используя GDI + Graphics .
  2. Создайте оболочку .NET для C ++ API для ImageMagick.Вы можете получить хороший старт, проверив ImageMagickNET .
...