2

CYMK イメージのバイトを RGB イメージのバイトに変換する必要があります。
ヘッダーのバイトをスキップし、他のバイトを RGB に変換してから、ヘッダーのバイトをRGBフォーマットに変更することは可能だと思います。
変更するヘッダー バイトはどれRGBですか?
ICC プロファイルを使用しないビットカラー変換の式はどれですか?

このコードを完成させるのを手伝ってくれる人はいますか?

//Decode with inSampleSize
Bitmap Resultbitmap;
string path = "imageFileCmyk.jpg";
int scale=4;
BitmapFactory.Options o2 = new BitmapFactory.Options();
o2.inPurgeable = true;
o2.inSampleSize=scale;
o2.inDither = false;                                                        
Resultbitmap = BitmapFactory.decodeStream(new FileInputStream(path), null, o2);
if (Resultbitmap==null) // Warning!! unsupported color conversion request
{
    File tmpfile = new File(path);
    FileInputStream is = new FileInputStream(tmpfile.getPath());
    byte[] cmykBytes= new byte[(int)tmpfile.length()];
    byte[] rgbBytes= new byte[(int)tmpfile.length()];
    is.read(cmykBytes);
    for (int i = 0; cmykBytes.length>i; ++i)
    {
       if (i>11)  // skip header's bytes, is it correct ??
       {
          rgbBytes[i] = cmykBytes[i]?? // How ??
       }
    }
    // new header bytes for RGB format
    rgbBytes[??]= ?? // How ??
    Resultbitmap = BitmapFactory.decodeByteArray(rgbBytes, 0, rgbBytes.length, o2);
}
return Resultbitmap;

ありがとう、
アルベルト

4

2 に答える 2

0

色空間を変換するコードをandroid-lib-magickにインポートするだけで、非常に簡単です。

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);

Kord、変換された画像を再度保存する必要がなくても、それを使用してビットマップを作成できます. イメージがデバイスまたは SD カードにない場合は、最初にダウンロードする必要があります。

「getCMYKImageFromPath」と「getCMYKImageFromURL」というandroid-lib-magickを使用して 2 つの簡単なメソッドを実装しました。ここでコードを見ることができます:

https://github.com/Mariovc/GetCMYKImage

于 2013-12-11T11:35:59.577 に答える
0

やった!Android プラットフォームで、CMYK、YCCK などの一般的ではない色空間を使用する *.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:39:26.440 に答える