rgb - Java BufferedImage -
i have stored rgb image in bufferedimage, want take each color (eg. red) , store in new bufferedimage. @ end, have 4 bufferedimage, original 1 , 1 each color. each bufferedimage each color should 8 bits per pixel , 8 bits contain color value.
this did.
string filename = "test.jpg"; file infile = new file(filename); bufferedimage refimg = imageio.read(infile); bufferedimage redimage = new bufferedimage(refimg.getwidth(), refimg.getheight(), bufferedimage.type_byte_gray); // line 4 bufferedimage greenimage = new bufferedimage(refimg.getwidth(), refimg.getheight(), refimg.gettype()); bufferedimage blueimage = new bufferedimage(refimg.getwidth(), refimg.getheight(), refimg.gettype()); (int = 0; < refimg.getwidth(); i++) (int j = 0; j < refimg.getheight(); j++) { int rgb = refimg.getrgb(i, j); int red = (rgb >> 16) & 0xff; int green = (rgb >> 8) & 0xff; int blue = rgb & 0xff; int ronly = (red << 16) | (0 << 8) | 0; int gonly = (0 << 16) | (green << 8) | 0; int bonly = (0 << 16) | (0 << 8) | blue; redimage.setrgb(i, j, ronly); greenimage.setrgb(i, j, gonly); blueimage.setrgb(i, j, bonly); } file redout = new file("testred.jpg"); file greenout = new file("testgreen.jpg"); file blueout = new file("testblue.jpg"); imageio.write(redimage, "jpg", redout); imageio.write(greenimage, "jpg", greenout); imageio.write(blueimage, "jpg", blueout);
however, still in rgb color model. when changed type of bufferedimage red 1 gray (line 4), not red component.
any or direction.
it's bit hard understand trying achieve here... if make images type_byte_gray
, gray.
also, if want store jpeg, have choose between single channel gray or 3 channel rgb. can't have single channel red/green/blue.
so, have 2 options:
in addition original rgb image, have 3 gray images, stored grayscale jpegs. need change code:
bufferedimage redimage = new bufferedimage(refimg.getwidth(), refimg.getheight(), bufferedimage.type_byte_gray); bufferedimage greenimage = new bufferedimage(refimg.getwidth(), refimg.getheight(), bufferedimage.type_byte_gray); bufferedimage blueimage = new bufferedimage(refimg.getwidth(), refimg.getheight(), bufferedimage.type_byte_gray);
...
int ronly = (red << 16) | (red << 8) | red; int gonly = (green << 16) | (green << 8) | green; int bonly = (blue << 16) | (blue << 8) | blue; redimage.setrgb(i, j, ronly); greenimage.setrgb(i, j, gonly); blueimage.setrgb(i, j, bonly);
these images contain red, green , blue channels respectively, default display gray. can use lookupop
convert images all-red/green/blue rgb display purposes, if needed.
the alternative have 3 rgb images containing red, green , blue (like initial attempt). these images rgb, have 3 channels , store rgb (as ycbcr, likely) jpegs.
a third option use all-red/green/blue (256 shades) palette indexcolormodel
. jpeg can't store palette/indexed images, have converted rgb, or can change file format png, gif or bmp.
Comments
Post a Comment