2012-06-15 88 views
1

我正在製作一個應用程序,它顯示Imagemagick從PDF文件生成的大量圖像。某些圖像無法使用BitmapFactory加載。它只是返回null而不是位圖。無法使用BitmapFactory.decodeFile加載JPEG圖像。返回null

日誌說:

D/skia(15101): --- decoder->decode returned false 

一些有問題的圖像是非常小的,是不是內存的問題,圖像不腐敗,因爲我可以向他們展示任何其他機器上。此外BitmapFactory能夠在寬度和高度解碼,如果我在選擇使用

inJustDecodeBounds = true; 

我試圖用外部圖像查看器(QuickPic)加載其中一個圖像沒有運氣。它還返回「加載失敗」,表示SKIA認爲圖像已損壞或至少由於某種原因不被支持。

一個不工作的圖片,可以發現here

我用來加載它的完整源代碼在這裏

BitmapFactory.Options o = new BitmapFactory.Options(); 
    o.inJustDecodeBounds = true; 
    BitmapFactory.decodeFile(FILENAME,o); 
    int width = o.outWidth; 
    int height = o.outHeight; 
    /* Width and height decoded successfuly */ 

    BitmapFactory.Options o2 = new BitmapFactory.Options(); 
    o.inJustDecodeBounds = false; 
    Bitmap bitmap = BitmapFactory.decodeFile(FILENAME,o2); 
    /*Bitmap is null */ 

任何想法是錯誤的,或者它如何能夠規避是歡迎。

+0

u能張貼創建文件名的代碼? – dor506

+0

FILENAME只是一個指向特定圖像文件的常量。在我的情況下,它被定義爲'final static String FILENAME =「/sdcard/MPSIT.jpg」;' – Niels

回答

1

顯然SKIA has a problem JPG與CMYK配置文件。解決我的問題的方法是將參數「-colorspace RGB」添加到imagemagick轉換中。

1

帶有CMYK色彩空間的圖像(如this)不能由Android默認解碼,因此無法顯示。

Niels是對的,但如果您無法更改imageMagick轉換上的參數,則可以將CMYK圖像轉換爲RGB圖像(由Android支持)。 Android的imageMagick庫名爲android-lib-magickhere是解決此問題的一種解決方法。

只導入this library代碼改造了它的色彩非常簡單:

ImageInfo info = new ImageInfo(path); // path where the CMYK image is your device 
MagickImage imageCMYK = new MagickImage(info); 
imageCMYK.transformRgbImage(ColorspaceType.CMYKColorspace); 
Bitmap bitmap = MagickBitmap.ToBitmap(imageCMYK); 

如果圖像是不是在您的設備或SD卡上,你需要先下載它。

我已經實現了兩個簡單的方法,使用android-lib-magick,叫做「getCMYKImageFromPath」和「getCMYKImageFromURL」。你可以看到代碼here

https://github.com/Mariovc/GetCMYKImage

相關問題