问题描述:
导入图像时,遍历像素这样的:保存导入图像的色彩深度与</p> <pre class="lang-java prettyprint-override"><code>loadImage("...") </code></pre> <p>命令
img.loadPixels();
int w = img.width;
int h = img.height;
for (int y = 0; y < h; y++) {
for (int x = 0; x < w; x++) {
int loc = x + y*w;
float r = red(img.pixels[loc]);
float g = green(img.pixels[loc]);
float b = blue(img.pixels[loc]);
println(r + ", " + g + ", " + b);
}
}
RGB值似乎总是在0即使图像文件的深度为16位,每个通道的值也应该在0到65535之间。 是否可以保留正确的颜色深度?
答
你还没有说loadImage命令来自哪个库。 可能有16位版本,但不太可能。 24位是一种标准,适用于所有非常高端的工作。
我建议你做的是看看我的TIFF加载器(它像loadImage一样返回24位图像),并修改它以返回16位通道。这并不困难,只是不丢弃较大通道图像的低位(浮点和16位)。
Her'e的TIFF装载机: https://github.com/MalcolmMcLean/tiffloader
你就不能用'65535/255'乘号? –
这是行不通的,因为即使数字r g和b存储为浮点数,它们基本上都是整数,因此相乘实际上并不会恢复原始深度。 –
'red()','green()'和'blue()'函数返回一个标准化的值。也许尝试直接访问像素[loc]的值,而不是通过颜色函数传递它? –