3

私は CMYK モードのビットマップを持っていますが、Android では正しく表示されず、ある時点でまったく表示されません。グーグルは多くの答えを返さなかったので、CMYKモードの画像をどのように処理するのですか?

ありがとう

アップデート

わかりました。リクエストに応じて詳細情報を提供します。アセットにある画像があり、それからビットマップを作成します。次に、ビットマップを作成するときは、次のようにします。

Bitmap bm = Bitmap.createBitmap(width, height, Config.ARGB_8888);

イメージは CMYK モードです。ImageView に配置すると、白いボックスとして表示されます。表示されません。

お役に立てれば。

4

4 に答える 4

0

やった!CMYK、YCCK などの一般的ではない色空間を使用する Android プラットフォームで *.jpg ファイルを正しく処理するための優れたツールを見つけました。https://github.com/puelocesar/android-lib-magickを使用してください。これは無料で、Android ライブラリを簡単に構成できます。CMYK 画像を RGB 色空間に変換するためのスニペットを次に示します。

ImageInfo info = new ImageInfo(Environment.getExternalStorageDirectory().getAbsolutePath() + "/cmyk.jpg");
MagickImage imageCMYK = new MagickImage(info);

Log.d(TAG, "ColorSpace BEFORE => " + imageCMYK.getColorspace());
boolean status = imageCMYK.transformRgbImage(ColorspaceType.CMYKColorspace);
Log.d(TAG, "ColorSpace AFTER => " + imageCMYK.getColorspace() + ", success = " + status);

imageCMYK.setFileName(Environment.getExternalStorageDirectory().getAbsolutePath() + "/cmyk_new.jpg");
imageCMYK.writeImage(info);
Bitmap bitmap = BitmapFactory.decodeFile(Environment.getExternalStorageDirectory().getAbsolutePath()
            + "/Docs/cmyk_new.jpg");
if (bitmap == null) {
    //if decoding fails, create empty image 
    bitmap = Bitmap.createBitmap(imageCMYK.getWidth(), imageCMYK.getHeight(), Config.ARGB_8888);
}    
ImageView imageView1 = (ImageView) findViewById(R.id.imageView1);
imageView1.setImageBitmap(bitmap);
于 2013-04-09T08:31:21.983 に答える
0

CMYKは印刷用のフォーマットです。jpeg、ビットマップなどのすべての「標準」構造は SCREEN 用であり、RGB であるかのように構造を読み取ります。結果を PDF またはその他のポストスクリプトに入れると、問題なく表示されます。

于 2011-11-18T21:30:01.483 に答える
0

https://github.com/puelocesar/android-lib-magickのライブラリも使用しました。 以下は私のコードです。ストレージに新しいファイルを作成する必要はありません。

try {
        ImageInfo info = new ImageInfo(Environment.getExternalStorageDirectory().getAbsolutePath() + "/cmyk.jpg");
        MagickImage image = new MagickImage(info);

        if(image.getColorspace() == ColorspaceType.CMYKColorspace) {
            Log.e("ImageMagick", "ColorSpace BEFORE => " + image.getColorspace());
            boolean status = image.transformRgbImage(ColorspaceType.CMYKColorspace);
            Log.e("ImageMagick", "ColorSpace AFTER => " + image.getColorspace() + ", success = " + status);
        }

        Bitmap bitmap = MagickBitmap.ToBitmap(image);
        Log.e("ImageMagick", "bitmap is " + bitmap);
        ivCMYK.setImageBitmap(bitmap);
    } catch (MagickException e) {
        Log.e("MagickException", e.getMessage());
    }
于 2013-07-26T04:11:50.180 に答える