Avatar billede www.isys.dk Nybegynder
23. januar 2001 - 22:01 Der er 7 kommentarer

hurtig image drawing i JAVA

se på:

http://www.carpathia.ro/atc2/

Her er en træstruktureret menu. Fold den hel ud så der fremkommer en scroolbar forneden.

Nu er det sådan, at hvis man hiver den til højer og venstre, så flytter den træet og baggrundsbillde til højre og venstre. Når jeg ser hvor meget tid den bruge af min processor (350 mhz) bruger den kun en 5-6% (den tegner baggrundsbilleder ligeså mange gange som der er en mouseEvent). Hvis jeg tegner et halv så stort billede bruger jeg dobbelt så meget tid! Jeg bruger dobbelt buffer metoden, ligesom denne applet også bruger den......

Hvad kan gøres for at når op på denne applets preformance?

har før fået af vide det er noget synkroniseret tråde? Men hvordan kan det hjælpe på preformance ved drawImage-metoden?

Avatar billede www.isys.dk Nybegynder
23. januar 2001 - 22:04 #1
Denne her har samme høje preformance, og source koden en med:

http://javaboutique.internet.com/dotScroller/
Avatar billede hoejrup Nybegynder
23. januar 2001 - 22:29 #2
Link: http://java.sun.com/products/java-media/2D/forDevelopers/java2dfaq.html

Svar: The new VolatileImage interface, to be introduced in the SDK, version 1.4, allows you to create a hardware-accelerated offscreen image and manage the contents of that image.

/per
Avatar billede www.isys.dk Nybegynder
23. januar 2001 - 22:35 #3
Ja det skulle gerne være java1, så det kan køre i en browser........
Avatar billede hoejrup Nybegynder
24. januar 2001 - 08:32 #4
Den aplet du henviser til bruger Java ver. 1.1.2, der understøtter multi threaded rutiner:

public void run() {
      while(true) {
      canvas.scroll(scrollStep);
      while (canvas.imageProcessing == true) {
            try {
          wait();
            }
        catch (Exception e) {
            }
      }
      canvas.repaint();
        try {
        Thread.sleep(5);
        }
      catch (Exception e) {
        }
    }
  }



Samtidig har han lavet følgende rutine

public void update(Graphics g) {
    if (offScreenImage == null) {
      //Create the doublebuffer image if it doesn\'t exist (only first paint)...
      offScreenImage = createImage(width, height);
      offScreenGraphics = offScreenImage.getGraphics();
      //Draw the background
      offScreenGraphics.setColor(backGroundColor);
      offScreenGraphics.fillRect(0, 0, width, height);
    }
    //Draw visible letters
    for (int i = 0;i < letters.size();i++) {
      ImageLetter imageLetter = ((ImageLetter) letters.elementAt(i));
      if (imageLetter.getIsScrolling()) {
        offScreenGraphics.drawImage(imageLetter.getLetterImage(), imageLetter.getXPos(), imageLetter.getYPos(), this);
      }
    }
    g.drawImage(offScreenImage, 0, 0, this);
  }
}

Rutinen sender grafikken udtil ram, derfra kan han kopiere direkte til vram. Og sparer tid på at lave beregningerne hvergang han flytter billedet. Denne rutine giver en meget bedre performance.

/per
Avatar billede www.isys.dk Nybegynder
25. januar 2001 - 23:30 #5
Selvom JAVA kan køre felere tråde, så kører han jo kune en. Og det har da heller ikke noget med den høje preformance at gøre!

Jeg forstå ikke det du siger med vram og ram, og at han sparer tid. ???

Han laver da en helt almindelig dobbelbuffering, ved at tegne på et billede i hukommmelsen. Hvis der er noget jeg har misforstået, må du lige præcisere........
Avatar billede stringbuffer Nybegynder
27. januar 2001 - 17:44 #6
fidusen med at køre det i en thread (selvom der kun er én)  er at selvom en funktion, der kaldes fra tråden, er længe om at blive udført, vil den ikke forhindre andre processer i at blive udført, da tråden kun får tildelt adgang til processoren i et begrænset tidsrum. Så selvom der er noget i en tråd, der venter på at etellerandet skal blive færdigt, vil appleten stadig kunne udføre andre opgaver, f.eks. vise billedet, håndtere events (museklik osv) mm...
Avatar billede hoejrup Nybegynder
27. januar 2001 - 20:03 #7
www.isys.dk> Den forklaring stringbuffer kommer med er korrekt, for det fik jeg også at vide på datanomstudiet i Java programmering i 1997.

/Per
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester