Are*_*iak 2 java tiff colors jai color-palette
我有TIFF256 字节的调色板。在Java中我读这TIFF来BufferedImage。这BufferedImage有IndexColorModel. 当我遍历 中的像素时BufferedImage,我只能得到 RGB。我想编写方法,用于x,y从调色板中获取原始颜色索引BufferedImage(不是 RGB 颜色,只是来自TIFFs 调色板的原始索引)。我怎样才能做到这一点?
我知道我可以遍历 IndexColorModel 并检查 RBG 相等性,但是如果TIFF至少有 2 个具有相同颜色的索引(例如索引 0 - 黑色、132 - 黑色;假设像素 10x10 具有黑色[rgb=0,0,0]- 那么我不知道我应该采用哪个索引 - 它们具有相同的 RGB 值)。我也可以读取原始数据TIFF,然后计算字节数组中的像素位置,但我不想这样做 - 我想使用JAI.
有没有办法在有BufferedImage和JAI没有外部库的情况下做到这一点?
谢谢
OK,那么你就可以得到
并从该数据数组中获取实际使用的索引。
本示例读取索引,在颜色模型中查找相应的颜色,并将结果写入“标准”BufferedImage(仅作为验证)
import java.awt.image.BufferedImage;
import java.awt.image.ColorModel;
import java.awt.image.DataBuffer;
import java.awt.image.DataBufferByte;
import java.awt.image.IndexColorModel;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
public class IndexedBufferedImage
{
public static void main(String[] args) throws IOException
{
BufferedImage image = ImageIO.read(new File("exampleTiff256.tif"));
System.out.println(image);
System.out.println(image.getColorModel());
ColorModel colorModel = image.getColorModel();
IndexColorModel indexColorModel = null;
if (colorModel instanceof IndexColorModel)
{
indexColorModel = (IndexColorModel)colorModel;
}
else
{
System.out.println("No IndexColorModel");
return;
}
DataBuffer dataBuffer = image.getRaster().getDataBuffer();
DataBufferByte dataBufferByte = null;
if (dataBuffer instanceof DataBufferByte)
{
dataBufferByte = (DataBufferByte)dataBuffer;
}
else
{
System.out.println("No DataBufferByte");
return;
}
int w = image.getWidth();
int h = image.getHeight();
BufferedImage test = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
byte data[] = dataBufferByte.getData();
for (int y=0; y<h; y++)
{
for (int x=0; x<w; x++)
{
int arrayIndex = x + y * w;
int colorIndex = data[arrayIndex];
int color = indexColorModel.getRGB(colorIndex);
System.out.println("At "+x+" "+y+" index is "+colorIndex+
" with color "+Integer.toHexString(color));
test.setRGB(x, y, color);
}
}
ImageIO.write(test, "PNG", new File("exampleTiff256.png"));
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2203 次 |
| 最近记录: |