tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
3
ZUGRIFFE
420
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    holtiwilan holtiwilan ist offline Mitglied Bronze
    Registriert seit
    Sep 2004
    Beiträge
    34
    Einen schönen Guten Tag.
    Ich habe folgenden Filter, um in einem Image eine Transparente Farbe zu setzten:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    
    public class MakeImageTransparent {
      public static Image makeColorTransparent(Image im, final Color color) {
        ImageFilter filter = new RGBImageFilter() {
          // the color we are looking for... Alpha bits are set to opaque
          public int markerRGB = color.getRGB() | 0xFF000000;
     
          public final int filterRGB(int x, int y, int rgb) {
            if ( (rgb | 0xFF000000) == markerRGB) {
              // Mark the alpha bits as zero - transparent
              return 0x00FFFFFF & rgb;
            }
            else {
              // nothing to do
              return rgb;
            }
          }
        };
     
        ImageProducer ip = new FilteredImageSource(im.getSource(), filter);
        return Toolkit.getDefaultToolkit().createImage(ip);
      }
    }

    Wenn ich jetzt z.B. ein Jpg habe, wird leider nciht der ganz Hintergrund transparent, sondern eben nur die pixel genau der Farbe.

    Meine Frage ist nun: Gibt es eine möglichkeit, dieser Klasse auch noch eine Toleranz mitzugeben. Das ich sagen kann 10 int werte im RGB Raum Toleranz?
    Könnte ich das einfach mit einer Schleife machen? Oder gibt es da eine Elegantere Lösung?

    Vielen Dank für die Hilfe schon mal.

    Tim
     

  2. #2
    Registriert seit
    Jun 2002
    Ort
    Saarbrücken (Saarland)
    Beiträge
    9.886
    Blog-Einträge
    29
    Hallo!

    Wie meinst du das mit 10 Werte im RGB Raum Toleranz?
    Toleranz nur in einer Farbe, in allen Farben?

    Gruss Tom
     
    Java rocks!
    How to become a good Java Programmer?
    Does IT in Java and .Net
    The only valid measurement of code quality: WTFs / minute
    Blog
    Xing
    Twitter

  3. #3
    holtiwilan holtiwilan ist offline Mitglied Bronze
    Registriert seit
    Sep 2004
    Beiträge
    34
    So, ich habe mal was gebastelt.
    Nun wird für jedePixel geschaut, ob es in der Toleranz liegt.

    Code :
    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
    
    import java.awt.*;
    import java.awt.image.*;
     
    public class MakeImageTransparent {
      public static Image makeColorTransparent(Image im, final Color color,
                                               final int toleranz) {
        System.out.println("color.getRGB(): " + color.getRGB());
        System.out.println("markerRGB: " + (color.getRGB() | 0xFF000000));
        ImageFilter filter = new RGBImageFilter() {
          // the color we are looking for... Alpha bits are set to opaque
          public int markerRGB = color.getRGB() | 0xFF000000;
          public Color markerColor = new Color(color.getRGB() | 0xFF000000);
          public final int filterRGB(int x, int y, int rgb) {
            // Ist das zu filternde Pixel
            // gleich der transparenten Farbe?
            Color PixelColor = new Color(rgb | 0xFF000000);
            //if ( (rgb | 0xFF000000) == markerRGB) {
            
            //Liegt die Farbe des Pixels im Toleranzbereich?
            if ( ( ( (markerColor.getRed() - PixelColor.getRed()) < toleranz &&
                    (markerColor.getRed() - PixelColor.getRed()) >= 0) ||
                  ( (PixelColor.getRed() - markerColor.getRed()) < toleranz &&
                   (PixelColor.getRed() - markerColor.getRed()) >= 0)) &&
     
                ( ( (markerColor.getGreen() - PixelColor.getGreen()) < toleranz &&
                   (markerColor.getGreen() - PixelColor.getGreen()) >= 0) ||
                 ( (PixelColor.getGreen() - markerColor.getGreen()) < toleranz &&
                  (PixelColor.getGreen() - markerColor.getGreen()) >= 0)) &&
     
                ( ( (markerColor.getBlue() - PixelColor.getBlue()) < toleranz &&
                   (markerColor.getBlue() - PixelColor.getBlue()) >= 0) ||
                 ( (PixelColor.getBlue() - markerColor.getBlue()) < toleranz &&
                  (PixelColor.getBlue() - markerColor.getBlue()) >= 0)))
     
            {
              // Mark the alpha bits as zero - transparent
              return 0x00FFFFFF & rgb;
            }
            else {
              // nothing to do
              return rgb;
            }
          }
        };
     
        ImageProducer ip = new FilteredImageSource(im.getSource(), filter);
        return Toolkit.getDefaultToolkit().createImage(ip);
      }
    }

    ganz gut.
     

  4. #4
    javaprogger1987 javaprogger1987 ist offline Mitglied Brokat
    Registriert seit
    Nov 2004
    Beiträge
    284
    Genau das Problem hab ich auch( -> http://www.tutorials.de/tutorials223258.html )
    Das ist cool das du da ne Lösung für hast, die werd ich jetzt gleich mal studieren
    Vielen Dank

    //edit: Ich glaub ich war da zu voreilig, muss mir mein Problem noch mal genauer angucken, ich glaub ich hab Mist erzählt, vergesst es einfach
    Geändert von javaprogger1987 (05.01.06 um 11:49 Uhr)
     

Ähnliche Themen

  1. Toleranz bei if-Anweisungen einstellen:
    Von Kafkalasch im Forum Java
    Antworten: 2
    Letzter Beitrag: 08.07.08, 09:58
  2. Transparenzfilter für BufferedImage?
    Von spawn3141 im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 2
    Letzter Beitrag: 29.04.05, 16:43
  3. Toleranz (bild)
    Von hannes05 im Forum Photoshop
    Antworten: 16
    Letzter Beitrag: 14.10.02, 17:49