java - How to convert Bufferedimage to indexed type and then extract the argb color palette -
i need convert bufferedimage bufferedimage indexed type extract indices of colors data , 256 color palette. think doing right conversion of bufferedimage indexed mode , extracting color indices next code:
bufferedimage palettebufferedimage=new bufferedimage(textureinfosubfile.getwidth(), textureinfosubfile.getheight(),bufferedimage.type_byte_indexed); palettebufferedimage.getgraphics().drawimage(originalbufferedimage, 0, 0, null); // puts image pixeldata bytebuffer byte[] pixels = ((databufferbyte) palettebufferedimage.getraster().getdatabuffer()).getdata();
my problem need know argb values of each color index( palette) put them array. have been reading colormodel , colorspace don´t find methods need.
finally solve code:
public static bufferedimage rgbatoindexedbufferedimage(bufferedimage sourcebufferedimage) { //with constructor create indexed bufferedimage same dimensiosn , default 256 color model bufferedimage indexedimage= new bufferedimage(sourcebufferedimage.getwidth(),sourcebufferedimage.getheight(),bufferedimage.type_byte_indexed); colormodel cm = indexedimage.getcolormodel(); indexcolormodel icm=(indexcolormodel) cm; int size=icm.getmapsize(); byte[] reds = new byte[size]; byte[] greens = new byte[size]; byte[] blues = new byte[size]; icm.getreds(reds); icm.getgreens(greens); icm.getblues(blues); writableraster raster=indexedimage.getraster(); int pixel = raster.getsample(0, 0, 0); indexcolormodel icm2 = new indexcolormodel(8, size, reds, greens, blues,pixel); indexedimage=new bufferedimage(icm2, raster,sourcebufferedimage.isalphapremultiplied(), null); indexedimage.getgraphics().drawimage(sourcebufferedimage, 0, 0, null); return indexedimage; }
Comments
Post a Comment