- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这就是我使用更“正确”的方式将 RGB 转换为 CMYK 的方式 - 即使用 ICC 颜色配置文件。
// Convert RGB to CMYK with level shift (minus 128)
private void RGB2CMYK(int[] rgb, float[][] C, float[][] M, float[][] Y, float[][] K, int imageWidth, int imageHeight) throws Exception {
ColorSpace instance = new ICC_ColorSpace(ICC_Profile.getInstance(JPEGWriter.class.getResourceAsStream(pathToCMYKProfile)));
float red, green, blue, cmyk[];
//
for(int i = 0, index = 0; i < imageHeight; i++) {
for(int j = 0; j < imageWidth; j++, index++) {
red = ((rgb[index] >> 16) & 0xff)/255.0f;
green = ((rgb[index] >> 8) & 0xff)/255.0f;
blue = (rgb[index] & 0xff)/255.0f;
cmyk = instance.fromRGB(new float[] {red, green, blue});
C[i][j] = cmyk[0]*255.0f - 128.0f;
M[i][j] = cmyk[1]*255.0f - 128.0f;
Y[i][j] = cmyk[2]*255.0f - 128.0f;
K[i][j] = cmyk[3]*255.0f - 128.0f;
}
}
}
我的问题是:考虑到大图像,它的速度太慢了。在一个案例中,我花了大约 104 秒而不是通常的 2 秒来将数据写入 JPEG 图像。事实证明,上面的转换是最耗时的部分。
我想知道有没有办法让它更快。 注意:我不会使用可以从网络上找到的廉价转换算法。
更新:根据haraldK的建议,修改后的版本如下:
private void RGB2CMYK(int[] rgb, float[][] C, float[][] M, float[][] Y, float[][] K, int imageWidth, int imageHeight) throws Exception {
if(cmykColorSpace == null)
cmykColorSpace = new ICC_ColorSpace(ICC_Profile.getInstance(JPEGWriter.class.getResourceAsStream(pathToCMYKProfile)));
DataBuffer db = new DataBufferInt(rgb, rgb.length);
WritableRaster raster = Raster.createPackedRaster(db, imageWidth, imageHeight, imageWidth, new int[] {0x00ff0000, 0x0000ff00, 0x000000ff}, null);
ColorSpace sRGB = ColorSpace.getInstance(ColorSpace.CS_sRGB);
ColorConvertOp cco = new ColorConvertOp(sRGB, cmykColorSpace, null);
WritableRaster cmykRaster = cco.filter(raster, null);
byte[] o = (byte[])cmykRaster.getDataElements(0, 0, imageWidth, imageHeight, null);
for(int i = 0, index = 0; i < imageHeight; i++) {
for(int j = 0; j < imageWidth; j++) {
C[i][j] = (o[index++]&0xff) - 128.0f;
M[i][j] = (o[index++]&0xff) - 128.0f;
Y[i][j] = (o[index++]&0xff) - 128.0f;
K[i][j] = (o[index++]&0xff) - 128.0f;
}
}
}
更新:我还发现在 BufferedImage 而不是 Raster 上进行过滤要快得多。看到这个帖子:ARGB int array to CMYKA byte array convertion
最佳答案
您应该摆脱最内层循环中的内存分配。 new
是一个非常昂贵的操作。它还可能会启动垃圾收集器,这会增加进一步的惩罚。
关于java - 从 RGB 转换为 CMYK 的任何更快的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23999442/
假设CMYK中定义了两种颜色: color1 = 30, 40, 50, 60 color2 = 50, 60, 70, 80 如果要打印它们,生成的颜色会有什么值? color_new = min(
我很难让 ImageMagick 的 identify 将 PDF 识别为 CMYK。 基本上,假设我正在使用 pdflatex 构建这个文件 test.tex: \documentclass[a4p
我使用此代码段在 javascript 中将 RGB 颜色转换为 CMYK: function RgbToCmyk(R,G,B) { if ((R == 0) && (G == 0) && (
将 CMYK eps 转换为 jpeg 时,Ghostscript 将颜色空间更改为 RGB。问题是在转换过程中保持颜色空间不变。提前谢谢。 最佳答案 假设您要将 EPS 中的任何 RGB 转换为 C
整整一个月,我一直在尝试找出如何加载 cmyk 图像(8 位 tiff)并进行 UCA、UCR、GCR 转换。 我知道这种转换的公式,但我在使用 C++ 或 C# 加载 cmyk 图像时遇到问题。 我
我有一个关于 C++ 颜色配置文件转换的项目,其中的想法是使用 CIELAB 作为 RGB 和所有其他(CMY;CMYK;HSV;HSL;...)之间的过渡。但我有一个大问题。我到处搜索,但找不到任何
我正在做一个项目,在那个项目中我需要能够: 获取一帧视频 将其更改为 CMYK 尝试渲染该帧 你们有什么建议吗? 为了获得帧,我想我可以使用 ffmpeg。 我认为写信的人 Android proce
我必须使用 RGB 值设置 div 的背景颜色。我可以通过这种方式。 现在,因为我也有 CMYK (0,1,0.5,0) 值,所以你能帮我用这些值实现相同的效果吗。 我这样做了,但是没有收获。
如何在 php 中将十六进制颜色值转换为等效的 CMYK 颜色值? 我想编写一个函数来执行此操作。但是我不知道如何将十六进制转换为 CMYK eg: 最佳答案 function hex2rgb($h
我需要在我的网页上使用 CMYK 颜色。有什么方法可以在 CSS 中使用 CMYK,或者可以使用 JavaScript 将 CMYK 转换为 RGB? 编辑: 我的意思是我有 CMYK 符号的颜色创建
将 CMYK 编码的颜色转换为其十六进制等效值的公式是什么? 最佳答案 我有一个坏消息要告诉你:没有简单的公式。青色、品红色和黄色是复杂的墨水颜色,转换为 RGB 取决于 colour profile
我想在不使用自动转换工具或库的情况下将缓冲图像从 RGBA 格式转换为 CYMK 格式,因此我尝试从使用 BufferedImage.getRGB() 获得的各个像素中提取 RGBA 值。这是我到目前
我知道 RGB 用于显示器,CMYK 用于打印,但我想在不进行任何转换的情况下使用 CMYK。我想上传 CMYK 图像 (jpeg) 并打印。但是当我使用 com.sun.image.codec.jp
我需要将 CMYK 图像转换为灰度 CMYK 图像。起初我以为我可以使用与 RGB -> 灰度转换相同的方法,比如 (R + G + B)/3 或 max(r, g, b)/2 + min(r, g,
众所周知,ie8 不支持 cmyk jpg 图像,它根本不渲染它们:-( 这是一篇关于它的帖子 http://www.plaveb.com/blog/cmyk-images-not-displayed
我想使用 java 打印机制绘制一些 Graphics2D 对象。所以我必须定义一个 Printable 的子类。 public class PrintCMYK() implements Printa
我可以使用 CMYK 格式设置位图中像素的颜色吗?还是必须将颜色转换为 RGB 值? 最佳答案 您需要先转换。以防万一您想知道它是如何完成的: R、G、B 值在 0..255 范围内给出。红色 (R)
我正在尝试使用 4 个 UISliders 来更改 CMYK 的值,然后在 View 中显示颜色,但我尝试了不同的公式,但仍然没有得到正确的值,所以我找到了这个 answer在堆栈溢出中但适用于 an
我正在尝试使用彩色按钮混合任何颜色组合,这些按钮输出特定的十六进制数字,并结合 Bootstrap 中的 slider ,允许用户指示他们想要使用的颜色百分比。 我无法让 slider 正常运行,我也
我正在从事一个项目,该项目要求我分离出 CYMK 图像中的每种颜色并生成将在特殊半色调打印机上打印的半色调图像。使用的方法类似于丝网打印,因为过程几乎相同。拍照并分解每个颜色 channel 。然后为
我是一名优秀的程序员,十分优秀!