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

Popular posts from this blog

PHP DOM loadHTML() method unusual warning -

python - How to create jsonb index using GIN on SQLAlchemy? -

c# - TransactionScope not rolling back although no complete() is called -