簡體   English   中英

C#中的ImageMagick:從轉換調用中獲取字節數組?

[英]ImageMagick in C#: Get byte array from Convert call?

我正在嘗試使用隨Windows Installer for ImageMagick提供的ImageMagickObject COM組件,作為COM引用導入到我的C#項目中。 到目前為止,我已經能夠使用它將圖像從磁盤上的一個文件轉換為磁盤上的另一個文件。 我試圖讓它在內存中轉換文件並將其返回到字節數組中,如庫中包含的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沒有變化。 救命!!

ImageMagickObject旨在為大多數ImageMagick二進制文件提供等效功能,而無需創建執行二進制文件的過程。 在“轉換”的情況下,成功案例中沒有預期的輸出(或ImageMagickObject返回值)。

據我所知,如果你想從C#中得到這個,我有兩個選擇:

  1. 將圖像轉換為臨時文件,然后使用GDI + Graphics讀取它。
  2. 為ImageMagick的C ++ API創建.NET包裝器。 您可以通過查看ImageMagickNET獲得良好的開端。

您從ImageMagickObject源調用的方法的簽名是:

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

這似乎意味着它應該接受兩個參數,一個將返回一個返回值,但它無法使用除單個ref object[]參數之外的任何其他參數進行編譯。

我對COM編程不是很熟悉,所以希望有更多的專家能夠發現這一點,並且可以幫助您找到正確的C#代碼。

另外(我確定你注意到了),Visual Studio檢測到的方法簽名暗示Convertparams object[]的形式接受參數,但它只能用一個ref object[]參數進行編譯(即使它將其標記為編譯前的錯誤)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM