source: osm/applications/editors/josm/plugins/cadastre-fr/src/cadastre_fr/RasterImageModifier.java@ 18271

Last change on this file since 18271 was 17215, checked in by pieren, 16 years ago

improve georeferencing action cancellation; fixed bug of raster image loaded from cache not working on Java1.6; improve mouse click bounce detection during georeferencing process

File size: 3.7 KB
Line 
1package cadastre_fr;
2
3import java.awt.Color;
4import java.awt.image.BufferedImage;
5import java.awt.image.ComponentColorModel;
6
7import org.openstreetmap.josm.Main;
8
9public class RasterImageModifier extends ImageModifier {
10
11 private int cadastreBackground = -1; // white
12
13 public static int cadastreBackgroundTransp = 16777215; // original white but transparent
14
15 private boolean transparencyEnabled = false;
16
17 public RasterImageModifier(BufferedImage bi) {
18 bufferedImage = bi;
19 transparencyEnabled = Main.pref.getBoolean("cadastrewms.backgroundTransparent");
20 if (transparencyEnabled)
21 makeTransparent();
22 if (Main.pref.getBoolean("cadastrewms.invertGrey"))
23 invertGrey();
24 }
25
26 /**
27 * Invert black/white/grey pixels (to change original black characters to white).
28 */
29 private void invertGrey() {
30 int w = bufferedImage.getWidth();
31 int h = bufferedImage.getHeight();
32 for (int x = 0; x < w; x++) {
33 for (int y = 0; y < h; y++) {
34 int pixel = bufferedImage.getRGB(x, y);
35 if ((!transparencyEnabled && pixel != cadastreBackground)
36 || (transparencyEnabled && pixel != cadastreBackgroundTransp)) {
37 bufferedImage.setRGB(x, y, reverseIfGrey(pixel));
38 }
39 }
40 }
41 }
42
43 /**
44 * Reverse the grey value if the pixel is grey (light grey becomes dark grey)
45 * Used for texts.
46 * @param pixel
47 * @return
48 */
49 private int reverseIfGrey(int pixel) {
50 Color col = new Color(pixel);
51 int r = col.getRed();
52 int g = col.getGreen();
53 int b = col.getBlue();
54 if ((b == r) && (b == g)) {
55 pixel = (0x00 << 32) + ((byte) (255 - r) << 16) + ((byte) (255 - r) << 8) + ((byte) (255 - r));
56 }
57 return pixel;
58 }
59
60 private void makeTransparent() {
61 if (bufferedImage.getColorModel() instanceof ComponentColorModel) {
62 int width = bufferedImage.getWidth();
63 int height = bufferedImage.getHeight();
64 BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
65 for (int y = 0; y < height; y++) {
66 for (int x = 0; x < width; x++) {
67 int rgb = bufferedImage.getRGB(x, y);
68 Color c = new Color(rgb);
69 int r = c.getRed();
70 int g = c.getGreen();
71 int b = c.getBlue();
72 Color maskedColor;
73 if (rgb == cadastreBackground) {
74 maskedColor = new Color(r, g, b, 0x00); // transparent
75 } else {
76 maskedColor = new Color(r, g, b, 0xFF); // opaque
77 }
78 //maskedColor = new Color(r, g, b, alpha);
79 bi.setRGB(x, y, maskedColor.getRGB());
80 }
81 }
82 bufferedImage = bi;
83 }
84 return;
85 }
86
87 /**
88 * Temporary fix for Java6 which doesn't de-serialize correctly cached image on disk.
89 * Recreate a new raster image based on what is loaded/serialized from disk cache.
90 * @param img
91 * @return new image
92 */
93 public static BufferedImage fixRasterImage(BufferedImage img) {
94 int width = img.getWidth();
95 int height = img.getHeight();
96 BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
97 int rgbArray[] = new int[width * height];
98 img.getRGB(0, 0, width, height, rgbArray, 0, width);
99 bi.setRGB(0, 0, width, height, rgbArray, 0, width);
100 return bi;
101 }
102
103}
Note: See TracBrowser for help on using the repository browser.