tutorials.de Buch-Aktion 02/2012
ERLEDIGT
NEIN
ANTWORTEN
7
ZUGRIFFE
715
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    coolerouny Tutorials.de Gastzugang
    morgen!

    ich wollte euch fragen ob wer ein example hat; wo ein sprite gezeichnet wird, aber so dass man den umriss nicht sieht
    d.h wenn man im paint irgendwo im bild einen kreis zeichnet, dass dann beim gezeichneten bild in der applikation dann nur der kreis is und nicht der weiße(oder irgendeine farbe) rest.

    hab schon überrall auf google gschaut da hams irgendwie auch nix

    mfg
    coolerouny!
     

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

    am einfachsten ist es, wenn du das "sprite" nicht mit Paint sondern beispielsweise mit Paint Shop pro erstellst, den Hintergrund transparent machst und das ganze als gif oder png speicherst. Eine andere Möglichkeit bestünde darin für alle Sprites eine bestimmte Farbe als Transaprent zu definieren und die später geladenen Bilder mittels eines ImageFilters so zu bearbieten, dass die "bestimmte" Farbe den höchsten Transparenzwert erhält.

    Gruß 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
    coolerouny Tutorials.de Gastzugang
    morgen!

    kann ich vl irgendwie abfragen welche farbe ein einzelner pixel eines bildes hat (also zb der ganz oben links)

    und dann alle die die gleiche farbe haben zeichnet man nicht?

    mfg
    coolerouny
     

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

    Ja. Die Klasse BufferedImage bietet beispielsweise die Methode
    int getRGB(int x, int y)

    Weiterhin könntest du dann mit einem java.awt.image.RGBImageFilter deine Transparenzaktion implementieren. Aber wie gesagt, der weg über transparente png's bzw. gif's ist viiiiiiel einfacher...

    Gruß 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

  5. #5
    Avatar von Billie
    Billie Billie ist offline Mitglied Platin
    Registriert seit
    Jan 2003
    Ort
    Arzl im Pitztal (Tirol)
    Beiträge
    507
    Ich hab hier ein Beispiel aus einem Spiel, wo ich eben transparente *.gif's verwendet habe.
    Also hier wird Hintergrund (bg rED, gREEN, bLUE) und Vodergrund(fg r, g, b) berechnet.

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
                int bg_r = (super._pxl[idx + pos] >> 16) & 0xFF;
                int bg_g = (super._pxl[idx + pos] >> 8) & 0xFF;
                int bg_b = (super._pxl[idx + pos] >> 0) & 0xFF;
     
                int fg_a = (pxl[idx] >> 24) & 0xFF;
                int fg_r = (pxl[idx] >> 16) & 0xFF;
                int fg_g = (pxl[idx] >> 8) & 0xFF;
                int fg_b = (pxl[idx] >> 0) & 0xFF;
     
                bg_r += ((fg_r - bg_r) * fg_a + fg_r) >> 8;
                bg_g += ((fg_g - bg_g) * fg_a + fg_g) >> 8;
                bg_b += ((fg_b - bg_b) * fg_a + fg_b) >> 8;
     
                super._pxl[idx + pos] = new Color(bg_r, bg_g, bg_b).getRGB();

    Und hier meine Sprite-Klasse:

    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
    
    class Sprite {
     
        private int pxl[];
        private int width;
        private int height;
     
        Sprite() {
        }
     
        Sprite(Image img) {
            width = img.getWidth(null);
            height = img.getHeight(null);
            pxl = new int[getWidth() * getHeight()];
            PixelGrabber pg = new PixelGrabber(img, 0, 0, width, height, pxl, 0, width);
            try {
                pg.grabPixels();
            } catch(InterruptedException e) {
            }
        }
     
        public int[] getPixels() {
            return pxl;
        }
     
        public int getWidth() {
            return width;
        }
     
        public int getHeight() {
            return height;
        }
    }
     
    Fann Ég Fjalli Fallega Steina
    Faldi Dá Alla Vildi Deim Leyna
    Huldi Dar Hellisskúta Heillasteina
    Alla Mína Una eth slegu Óskasteina

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

    Wär's nicht einfacher von Anfang an transparente Gif's / Pngs zu verwenden?

    Gruß 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

  7. #7
    Avatar von Billie
    Billie Billie ist offline Mitglied Platin
    Registriert seit
    Jan 2003
    Ort
    Arzl im Pitztal (Tirol)
    Beiträge
    507
    Bezieht sich das jetzt auch auf mein Programm-Schnipsel? Ich hatte nämlich ein Transparentes *.gif, aber aus irgendeinem unerklärlichen Grund wurde es bei der Darstellung mit drawImage nicht transparent gezeichnet... deshalb musste ich es sozusagen berechnen. Aber ich kann nicht viel dazu sagen, ist schon lange her...
     
    Fann Ég Fjalli Fallega Steina
    Faldi Dá Alla Vildi Deim Leyna
    Huldi Dar Hellisskúta Heillasteina
    Alla Mína Una eth slegu Óskasteina

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

    Schau mal hier:
    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
    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
    
    /**
     * 
     */
    package de.tutorials;
     
    import java.awt.Color;
    import java.awt.Graphics2D;
    import java.awt.image.BufferStrategy;
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.IOException;
     
    import javax.imageio.ImageIO;
    import javax.swing.JFrame;
     
    /**
     * @author Tom
     * 
     */
    public class TransparencyExample extends JFrame {
     
        BufferStrategy strategy;
     
        Thread runner = new Thread() {
            public void run() {
     
                BufferedImage img = null;
                try {
                    img = ImageIO.read(new File(
                            "c:/tutorials_logo.png"));
                } catch (IOException e1) {
                    e1.printStackTrace();
                }
                
                int i = 0;
                
                while (true) {
                    
                    Graphics2D g = (Graphics2D)strategy.getDrawGraphics();
                    g.clearRect(0,0,320,100);
                    if(i % 2 == 0){
                        i++;
                        g.setColor(Color.RED);
                    }else{
                        i--;
                        g.setColor(Color.BLUE);
                    }
                    g.fillRect(0,0,320,240);
                    g.drawImage(img,0,30,null);
                    g.dispose();
                    strategy.show();
                    
                    try {
                        sleep(500);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        };
     
        public TransparencyExample() {
            super("TransparencyExample");
            setDefaultCloseOperation(EXIT_ON_CLOSE);
            setSize(320, 100);
            setVisible(true);
            createBufferStrategy(2);
            strategy = getBufferStrategy();
            setIgnoreRepaint(true);
            runner.start();
        }
     
        /**
         * @param args
         */
        public static void main(String[] args) {
            new TransparencyExample();
        }
    }

    Gruß Tom
    Miniaturansicht angehängter Grafiken Miniaturansicht angehängter Grafiken sprites mit mit transparentem back zeichnen-tutorials_logo.png  
     
    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

Ähnliche Themen

  1. Antworten: 1
    Letzter Beitrag: 07.06.10, 22:35
  2. Antworten: 4
    Letzter Beitrag: 27.05.07, 15:01
  3. Wie erstelle ich Sprites?
    Von n00ki3 im Forum Smalltalk
    Antworten: 1
    Letzter Beitrag: 10.07.06, 13:49
  4. sprites zeichnen
    Von coolerouny im Forum Java
    Antworten: 6
    Letzter Beitrag: 08.04.05, 18:16
  5. Sprites in Java
    Von Souldrinker2004 im Forum Java
    Antworten: 2
    Letzter Beitrag: 06.02.05, 15:16