あなたoutputImageはすでに良いタイプと形式を持っている場合、あなたは、単にループを使用して2D 1Dへの変換を行うことができます(ご使用のアレイエンコードが[nbRows] [RowLength]であると仮定した場合):
private BufferedImage createImage(int[][] pixelData, BufferedImage outputImage)
{
int[] outputImagePixelData = ((DataBufferInt) outputImage.getRaster().getDataBuffer()).getData() ;
final int width = outputImage.getWidth() ;
final int height = outputImage.getHeight() ;
for (int y=0, pos=0 ; y < height ; y++)
for (int x=0 ; x < width ; x++, pos++)
outputImagePixelData[pos] = pixelData[y][x] ;
return outputImage;
}
しかし、 INT型はBufferedImageで実際にはよく定義されていません。デフォルトでは、TYPE_INT_RGBとTYPE_INT_ARGBがあり、ピクセルエンコーディングのR、G、B、A値を1つのINTに連結します。あなたは、単一のチャネルを持つint型のグレーレベルのBufferedImageを作成したい場合は、実行する必要があります。
private BufferedImage createImage(int[][] pixelData)
{
final int width = pixelData[0].length ;
final int height = pixelData.length ;
// First I create a BufferedImage with a DataBufferInt, with the appropriate dimensions and number of channels/bands/colors
ColorSpace myColorSpace = new FloatCS(ColorSpace.TYPE_GRAY, channel) ;
int[] bits = new int[]{32} ;
ColorModel myColorModel = new ComponentColorModel(myColorSpace,bits,false,false,ColorModel.OPAQUE,DataBuffer.TYPE_INT) ;
BufferedImage outputImage = new BufferedImage(myColorModel, myColorModel.createCompatibleWritableRaster(width, height), false, null) ;
int[] outputImagePixelData = ((DataBufferInt) outputImage.getRaster().getDataBuffer()).getData() ;
for (int y=0, pos=0 ; y < height ; y++)
for (int x=0 ; x < width ; x++, pos++)
outputImagePixelData[pos] = pixelData[y][x] ;
return outputImage ;
}
FloatCSはColorSpaceクラスであることで。ラボ、HLSなどの特定のColorSpaceが必要な場合は、独自のColorSpaceクラスを作成する必要があります。
public class FloatCS extends ColorSpace
{
private static final long serialVersionUID = -7713114653902159981L;
private ColorSpace rgb = ColorSpace.getInstance(ColorSpace.CS_sRGB) ;
public FloatCS(int type, int channel)
{
super(type, channel) ;
}
@Override
public float[] fromCIEXYZ(float[] pixel)
{
return fromRGB(rgb.fromCIEXYZ(pixel)) ;
}
@Override
public float[] fromRGB(float[] RGB)
{
return RGB ;
}
@Override
public float[] toCIEXYZ(float[] pixel)
{
return rgb.toCIEXYZ(toRGB(pixel)) ;
}
@Override
public float[] toRGB(float[] nRGB)
{
return nRGB ;
}
}
'FloatCS'クラスとは何ですか? –
申し訳ありませんが、私はそれを忘れました。ここにあります。 – FiReTiTi