2015-11-18 2 views
1

В классе writableRaster, существует метод:Формат пиксельного поля в writableRaster

public void setPixels(int x, 
      int y, 
      int w, 
      int h, 
      int[] iArray) 

Где в iArray должен хранить информацию о пикселях Для пикселя: 233(r)244(g)10(b), как она должна хранить в iArray?

Будет ли iArray[0] = 233, iArray[1] = 244, iArray[2] = 10 или iArray[0] = [24424410]?

ответ

1

Короткий ответ, он должен быть iArray[0] = 233, iArray[1] = 244, iArray[2] = 10 вместо iArray[0] = [24424410].

Однако объем данных будет зависеть от того, что поддерживает WritableRaster. Рассмотрим следующий пример, в котором мы извлекаем WriteableRaster из двух BufferedImages; один из которых содержит данные RGB и другие данные ARGB. Если мы получим значения пикселей, мы увидим, что массив имеет длину 3 для данных RGB и длину 4 для данных ARGB.

Код:

public static void main(String[] args) { 
    BufferedImage rgbImage = new BufferedImage(8, 8, 
      BufferedImage.TYPE_INT_RGB); 
    WritableRaster rgbRaster = rgbImage.getRaster(); 

    BufferedImage argbImage = new BufferedImage(8, 8, 
      BufferedImage.TYPE_INT_ARGB); 
    WritableRaster argbRaster = argbImage.getRaster(); 

    rgbImage.setRGB(0, 0, new Color(255, 125, 1, 16).getRGB()); 
    argbImage.setRGB(0, 0, new Color(255, 125, 1, 16).getRGB()); 

    int[] rgb = rgbRaster.getPixel(0, 0, (int[]) null); 
    int[] argb = argbRaster.getPixel(0, 0, (int[]) null); 
    System.out.print("rgb:"); 
    for (int i = 0; i < rgb.length; ++i) 
     System.out.print(" "+rgb[i]); 

    System.out.print("\nargb:"); 
    for (int i = 0; i < argb.length; ++i) 
     System.out.print(" "+argb[i]); 
} 

Выход:

rgb: 255 125 1 
argb: 255 125 1 16 
+0

Спасибо очень много. Я полагаю, что первые 255 в выводе для значения Alpha? Но почему выход rgb должен быть 255 125 1, а не 125 1 16? – SamW

Смежные вопросы