setPixel的颜色

时间:2015-05-29 13:45:45

标签: java

找到一个例子:

raster.setPixel( pf, jj, clr );

clr 有4个元素:

static int[] clr = {0, 0, 0, 255}; 

为什么呢?第4个元素是什么意思?没有它就无法工作,抛出ArrayIndexOutOfBoundsException。

3 个答案:

答案 0 :(得分:2)

您的WritableRaster是使用SampleModel创建的,每个像素需要四个样本。

在不了解您的应用程序的情况下(使用?创建的栅格的确切body { padding: 4em 40%; text-align: center; } select { $bg-color: lightcyan; $text-color: black; appearance: none; // using -prefix-free http://leaverou.github.io/prefixfree/ background: { color: $bg-color; image: url("https://s3-us-west-2.amazonaws.com/s.cdpn.io/1255/caret--down-15.png"); position: right; repeat: no-repeat; } border: { color: mix($bg-color, black, 80%); radius: .2em; style: solid; width: 1px; right-color: mix($bg-color, black, 60%); bottom-color: mix($bg-color, black, 60%); } color: $text-color; padding: .33em .5em; width: 100%; } // Removes default arrow for IE10+ // IE 8/9 get dafault arrow which covers caret image // as long as caret image is small than and positioned // behind default arrow select::-ms-expand { display: none; } ),很难确定第四个组件的含义。它很可能是alpha通道,它包含像素的不透明度,其中0 =透明,255 =完全不透明。

答案 1 :(得分:1)

根据您的评论,您确认raster类型为WritableRaster

首先,为您的例外

  

没有它就无法工作,抛出ArrayIndexOutOfBoundsException。

从文档中,如果坐标不在边界内,或者给定的数组太小而无法容纳输入,则会抛出AIOOBE。

现在代表数组中给出的4个输入,

输入数组为栅格的每个波段定义样本。如果你打电话给例如WritableRaster#getNumBands,它应该返回4。

但是whare是bands

这里是3个样本数组代表的直观表示:

enter image description here

现在第四个乐队,我很确定它是alpha样本。好吧,至少其中一个是alpha,但我们无法确认哪一个是你可以在创建光栅时修改波段的顺序。

答案 2 :(得分:0)

第四个参数是透明度值。

来自documentation.

  

public void setPixel(int x,int y,int [] iArray)

     

使用用于输入的int数组样本在DataBuffer中设置像素。如果坐标不在边界内,则可能抛出ArrayIndexOutOfBoundsException。但是,不保证显式边界检查。

     

参数:

     

x - 像素位置的X坐标。

     

y - 像素位置的Y坐标。

     

iArray - int数组中的输入样本。

     

抛出:   NullPointerException - 如果iArray为null。

     

ArrayIndexOutOfBoundsException - 如果坐标不在边界内,或者iArray太小而无法容纳输入。

通常在处理像素时,您将拥有X和Y值,然后是R,G,B的3个参数或R,G,B, A 的4个参数,其中 是alpha通道,也称为不透明度。它将采用0到255之间的值,就像RGB值一样。