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
| 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; }
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; }
static public int[] grabPixels(BufferedImage img) { if(img.getRaster().getDataBuffer() instanceof DataBufferInt) return ((DataBufferInt) img.getRaster().getDataBuffer()).getData(); else return grabPixelsOld(img); }
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; color = a|r|g|b; pixels[i] = color; } } return makeImage(pixels, grayscaleImg.getWidth(), grayscaleImg.getHeight()); } |