Android CMYK模式

时间:2011-07-08 13:27:44

标签: java android graphics cmyk

我在CMYK模式下有一个位图,它在Android上没有正确显示,在某些时候根本没有显示。谷歌搜索没有返回很多答案,所以我在这里问我如何处理CMYK模式图像?

由于

更新

好的,请求更多信息。我有一个资产中的图像,我构建了一个Bitmap。然后当我构造Bitmap时,我会这样做:

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

图像处于CMYK模式。 当我把它放在ImageView上时 - 它显示为白色框。没有显示。

希望这有帮助。

4 个答案:

答案 0 :(得分:0)

CMYK是PRINTING的一种格式。所有“标准”结构(如jpeg,位图等)都用于SCREEN,并将您的结构读取为RGB。将结果放在PDF或其他postscript中,你会看到它。

答案 1 :(得分: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);

答案 2 :(得分: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());
    }

答案 3 :(得分:0)

Here是使用android-lib-magick显示an image with CMYK colorspare(Android不支持)的示例代码,该代码来自网址。

https://github.com/Mariovc/GetCMYKImage

有两种方法称为“getCMYKImageFromPath”和“getCMYKImageFromURL”。