我需要将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;
谢谢,
阿尔贝托
答案 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: