2011-02-08 59 views
0

我正在使用imagemagick DLL(請參閱:http://www.imagemagick.org)調整圖像大小,
但是,當我重新調整大小的動畫GIF圖像,然後它將螺桿。如何使用imagemagick調整動畫gif文件而不破壞使用C#的動畫?

我用下面的代碼重新大小的圖像(圖像類型是PNG,GIF,JPG,BMP,TIF ...)

ImageMagickObject.MagickImage imgLarge = new ImageMagickObject.MagickImage(); 
object[] o = new object[] { strOrig, "-resize", size, "-gravity", "center", "-colorspace", "RGB", "-extent", "1024x768", strDestNw }; 
imgLarge.Convert(ref o); 

我怎樣才能修復它。 看到結果圖片enter image description here

回答

3

我認爲你必須首先從gif中提取每一幀,調整每一幀的大小,然後重新放在一起。

編輯:像這樣?沒有測試也沒有建...

int maxFrames=32; 
ImageMagickObject.MagickImage imgLarge = new ImageMagickObject.MagickImage(); 

// first extract all frames from gif to single png files 
for(int frame=0; frame<maxFrames;frame++) 
{ 
    object[] o = new object[] { String.Format(strOrig+"[{0}]", frame) 
     , String.Format("tmp{0}.png", frame) }; 
    imgLarge.Convert(ref o);  
} 
// resize every single png files 
// add resized filenames to stringbuilder 
StringBuilder filenames = new StringBuilder(); 
for(int frame=0; frame<maxFrames;frame++) 
{ 
    object[] o = new object[] { String.Format("tmp{0}.png", frame) 
       , "-resize" 
       , size 
       , "-gravity" 
       , "center" 
       , "-colorspace" 
       , "RGB" 
       , "-extent" 
       , "1024x768" 
       , String.Format("tmp-resized{0}.png", frame) }; 
    filenames.Append(String.Format("tmp-resized{0}.png", frame)); 
    filenames.Append(Environment.NewLine); 
    imgLarge.Convert(ref o);  
} 
// write resized filenames to file 
File.WriteAllText("tmp-resized-files.txt", filenames); 
// create resize animated gif based on filenames in the tmp-resized-files.txt 
    object[] o = new object[] { "@tmp-resized-files.txt" 
     , strDestNw }; 
    imgLarge.Convert(ref o);  
+0

我該怎麼辦?與收集每一個框架併合並它..你有任何代碼? – 2011-02-09 04:50:35