将图像字节[]从CMYK转换为RGB?

时间:2012-08-22 13:31:14

标签: android image colors cmyk

我需要将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;

谢谢,
阿尔贝托

2 个答案:

答案 0 :(得分:0)

我做到了!我找到了一个很好的工具,可以在Android平台上正确处理* .jpg文件,使用不常见的颜色空间,如CMYK,YCCK等。 使用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);

答案 1 :(得分: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卡中,则需要先下载它。

我使用android-lib-magick实现了两个简单的方法,称为“getCMYKImageFromPath”和“getCMYKImageFromURL”。您可以看到代码here

https://github.com/Mariovc/GetCMYKImage