我必须处理非常大的(1-2GB)Tiff文件,并且只需要对像素执行一些RGB操作,其中我只进行局部校正(修改像素的颜色仅取决于其旧值,但不是在例如邻居像素上)。 他们的(JAVA)是一种将文件读取为某种像素流的方法,对RGB值进行调整,并将这些内容立即写入另一个文件?我没有足够的内存将整个文件存储在RAM中(或者至少我希望我能避免它)
任何提示都是......
THX
-Marco
答案 0 :(得分:0)
嗯,我实际上不知道什么是tiff文件?,但是如果它是一个文件,可以将其存储在BufferedImage中,则它应该相对容易一些。 我会做类似的事情:
protected $primaryKey = 'id';
您现在基本上可以使用argb值来做所有您想做的事情。
例如,您可以通过执行public BufferedImage correctRGB()
{
BufferedImage b = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
//width and height are the width and height of the original image
Graphics g = b.getGraphics();
for(int x = 0; x < b.getHeight(); x++)
{
for(int y = 0; y < b.getWidth(); y++)
{
//loop through all the pixels in the image ONCE to spare RAM
int pixels = b.getRGB(x, y);
int alpha = (pixels >> 24) &0xff;
int red = (pixels >> 16) &0xff;
int green = (pixels >> 8) &0xff;
int blue = pixels &0xff;
//in here you play around with the values
g.setColor(new Color(red, green, blue, alpha));
g.fillRect(x, y, 1, 1);
}
}
g.dispose();
return b;
}
等操作将整个图像变为负片。
或通过将整个图像变成灰度
red = 255 - red