对于我的项目,我必须读取图像中的每个像素,对每个像素执行数学运算,然后在更新的图像中显示修改的像素的结果。在这个例子中,我采用了每个像素的平方根。
public void rootCalc(){//go through the rows and columns for(int x=grayscale_orig.getWidth() - 1; x >= 1; x--)
{
for (int y = grayscale_orig.getHeight() - 1; y >= 0; y--)
{
//this is the pixel array
int[] rgb1 = getColors(grayscale_orig.getRGB(x, y));
for(int g=0; g<rgb1.length;g++)
{ //take the square root of each pixel value
v=255*(Math.sqrt(rgb1[g])/Math.sqrt(255));
//scale the squared value back into the 0-255 range and set the value
grayscale.setRGB(x,y,(int)v);
}
}
}}
我的问题是如何设置和显示setRGB()
代码中的修改像素。当我插入一个int - (int)v时,图像全是黑色的。我必须将int更改为十六进制吗?我尝试过这样的事情:
v=255*(Math.sqrt(rgb1[g]) / Math.sqrt(255));
String vstring=Double.toHexString(v);
并且不允许我在setRGB()中输入字符串; = \
答案 0 :(得分:1)
没有“十六进制”这样的东西 - int只是一个数字。我们通常在代码中使用十进制表示法,它实际上只是保存了二进制系统 - 但是,它只是一个数字,你不能只是“将其改为十六进制”。
但是您的代码存在问题。你可以为颜色的红色成分调用setRGB一次,然后对颜色的绿色成分调用一次,然后再对蓝色成分调用一次(我认为无论如何都是这个顺序)。但是,setRGB需要一个整数来表示整个颜色。
您可以手动计算这样的整数,但是更容易从颜色的那些区域中创建一个Color对象,然后通过在Color上调用getRGB来获取赋予setGRB的值。