Android CMYK mode - PullRequest
       22

Android CMYK mode

3 голосов
/ 08 июля 2011

У меня есть битмап в режиме CMYK, который не отображается правильно, а в какой-то момент вообще не отображается на Android.Поиск в Google не дал много ответов, поэтому я должен спросить здесь, как мне обрабатывать изображения в режиме CMYK?

Спасибо

ОБНОВЛЕНИЕ

Хорошо,больше информации по запросу.У меня есть изображение в активах, и я строю из него растровое изображение.Затем, когда я создаю растровое изображение, я делаю это следующим образом:

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

Изображение в режиме CMYK.Когда я помещаю это в ImageView - это появляется как белая коробка.Не показано.

Надеюсь, это поможет.

Ответы [ 4 ]

0 голосов
/ 11 декабря 2013

Здесь - пример кода, использующего android-lib-magick для отображения изображения с CMYK colorspare (не поддерживается Android), полученного из URL.

https://github.com/Mariovc/GetCMYKImage

Существует два метода, называемых "getCMYKImageFromPath" и "getCMYKImageFromURL".

0 голосов
/ 09 апреля 2013

Я сделал это!Я нашел хороший инструмент для правильной обработки файлов * .jpg на платформе Android с необычными цветовыми пространствами, такими как 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);
0 голосов
/ 26 июля 2013

Я также использовал библиотеку 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());
    }
0 голосов
/ 19 ноября 2011

CMYK - это формат для ПЕЧАТИ.Все «стандартные» структуры, такие как jpeg, растровые изображения и т. Д., Предназначены для ЭКРАНА и читают вашу структуру, как если бы она была RGB.Поместите результат в PDF или другой постскриптум, и вы увидите, что все в порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...