修改像素后如何使用setRGB()?我需要使用十六进制吗?

时间:2010-08-25 20:19:03

标签: image-processing pixel java-2d

对于我的项目,我必须读取图像中的每个像素,对每个像素执行数学运算,然后在更新的图像中显示修改的像素的结果。在这个例子中,我采用了每个像素的平方根。

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()中输入字符串; = \

1 个答案:

答案 0 :(得分:1)

没有“十六进制”这样的东西 - int只是一个数字。我们通常在代码中使用十进制表示法,它实际上只是保存了二进制系统 - 但是,它只是一个数字,你不能只是“将其改为十六进制”。

但是您的代码存在问题。你可以为颜色的红色成分调用setRGB一次,然后对颜色的绿色成分调用一次,然后再对蓝色成分调用一次(我认为无论如何都是这个顺序)。但是,setRGB需要一个整数来表示整个颜色。

您可以手动计算这样的整数,但是更容易从颜色的那些区域中创建一个Color对象,然后通过在Color上调用getRGB来获取赋予setGRB的值。