Java-Gaming.org Java4K winners: [ by our judges | by the community ]         
Featured games (67)
games approved by the League of Dukes
Games in Showcase (∞)
games submitted by our members



News: Read the Java Gaming Resources, or peek at the official Java tutorials
 
    Home     Help   Search   Login   Register   
Pages: [1]
  Print  
  Coloring gray image  (Read 518 times)
0 Members and 2 Guests are viewing this topic.
Offline Rion

JGO n00b
*

Posts: 1



« on: 2011-10-29 15:04:41 »

Hi,
I've tried to create coloring gray image with given colour but it always failed. I know I have to use BufferedImage and load all pixels of source image into array, but I don't know how to work with color value, so there always were some weird colors after multiplying source color and given color.

Thanks for any help.
Offline zoto

Full Member
**

Posts: 234
Medals: 7



« Reply #1 on: 2011-10-30 20:34:24 »

Here is some code I have used before, I beleive you could also use a BufferedImageFilter.
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
32  
33  
34  
35  
36  
37  
38  
39  
40  
41  
42  
43  
44  
45  
46  
47  
48  
49  
50  
51  
52  
53  
54  
55  
56  
57  
58  
59  
60  
61  
62  
63  
64  
65  
66  
67  
68  
69  
70  
71  
72  
73  
74  
75  
76  
77  
78  
79  
   /**
    * Create a new BufferedImage from the information provided.
    *
    * @param pixels The color information stored as an integer. The 4 bytes of the integer are used for each color attribute, the first byte is the alpha information and the last 3 are the RGB(Red Green Blue) values.
    * @param width The width in pixels of the image.
    * @param height The height in pixels of the image.
    * @return A new image created from the information.
    */

   static public BufferedImage makeImage(int[] pixels, int width, int height) {
      BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
      img.setRGB(0,0,width, height, pixels, 0, width);
      return img;
   }

   /**
    * This function creates an integer array from the pixel colors of the image passed into it.
    *
    * @param img The source image.
    * @return An integer array containing the color information. The 4 bytes of the integer are used for each color attribute, the first byte is the alpha information and the last 3 are the RGB(Red Green Blue) values.
    */

   static public int[] grabPixelsOld(BufferedImage img) {
      int w = img.getWidth();
      int h = img.getHeight();
      int[] pixels = new int[w * h];
      try {
         img.getRGB(0,0,w,h,pixels, 0, w);
      } catch (Exception e) {
         System.err.println("interrupted waiting for pixels!");
         return null;
      }
      return pixels;
   }

   /**
    * This function creates an integer array from the pixel colors of the image passed into it.
    *
    * @param img The source image.
    * @return An integer array containing the color information. The 4 bytes of the integer are used for each color attribute, the first byte is the alpha information and the last 3 are the RGB(Red Green Blue) values.
    */

   static public int[] grabPixels(BufferedImage img) {
      if(img.getRaster().getDataBuffer() instanceof DataBufferInt)
         return ((DataBufferInt) img.getRaster().getDataBuffer()).getData();
      else
         return grabPixelsOld(img);
   }


   /**
    * Create a new BufferedImage that is a color version of the original grayscale image.
    *
    * @param grayscaleImg The source image to be colored.
    * @param newColor The color to use for the coloring of the image.
    * @return The new color image.
    */

   static public BufferedImage colorImage(BufferedImage grayscaleImg, Color newColor){
      int [] pixels = grabPixels(grayscaleImg);
      if (pixels==null || newColor == null)
         return grayscaleImg;
      int r, g, b, a, shade, red, green, blue, color;
      red = (0x00FF0000 & newColor.getRGB()) >> 16;
      green = (0x0000FF00 & newColor.getRGB()) >> 8;
      blue = (0x000000FF & newColor.getRGB());
      for (int i=0; i<pixels.length;i++){
         a = pixels[i] >> 24;
      if(a!=0){
         shade = (0x000000FF & pixels[i]);
         r = (red*shade/255);
         g = (green*shade/255);
         b = (blue*shade/255);
         a <<= 24;
         r <<= 16;
         g <<= 8;
         //b <<= 0;
        color = a|r|g|b;
         pixels[i] = color;
      }
      }
      return makeImage(pixels, grayscaleImg.getWidth(), grayscaleImg.getHeight());
   }
Pages: [1]
  Print  
 
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.16 | SMF © 2011, Simple Machines Valid XHTML 1.0! Valid CSS!
Page created in 0.069 seconds with 19 queries.