Zum Inhalt springen

BufferedImage mit 50% Transparenz auf ein Zweites zeichnen?


Empfohlene Beiträge

Geschrieben

Hallo,

wie kann ich ein BufferedImage mit 50%iger Transparenz auf ein zweites zeichnen?

Im Photoshop geht das relativ simpel...

Problem:

Es gibt die Möglichkeit, in meinem emulierten Computer jeweils 2 Bilder mit 25hz anzeigen zu lassen (Interlace)

Diese 2 flimmern dann natürlich arg, so dass ich sie zu einem Bild zusammenfassen möchte und dann dieses eine Bild jedes 2te mal updaten lassen möchte.

Dafür möchte ich das gepufferte Image halt mit 50% Transparenz auf das aktuelle zeichnen.

Erwünschtes Resultat:

op.png

Gruss,

Markus

Geschrieben
Hi,

Das ist das falsche Forum! Schau mal unter "Fachliche Foren"!

Mit freundlichen Grüßen

mustiwebp

Huch! Aber hier ist doch das Java-Forum...??!?

Wie dem auch sei,

Meine Methode sieht bislang so aus:

  public void setAlpha(int alpha) {

      for (int x=0;x<image2.getWidth();x++)

          for (int y=0;y<image2.getHeight();y++)

              image2.setRGB(x, y, (((

                      image2.getRGB(x, y)&0x00ffffff)

                      )|alpha<<24));

  }


// [snip]


           if (interlace){

              if (paint){

                  setAlpha(128);

                  image.getGraphics().drawImage(image2, 0,0,image.getWidth(), image.getHeight(), this);

                  output.getGraphics().drawImage(image, 0,0,image.getWidth(), image.getHeight(), this);

                  paint = false;

              } else {

                  image2.getGraphics().drawImage(image, 0,0,image.getWidth(), image.getHeight(), this);

                  paint = true;

              }

              image.getGraphics().drawImage(output, 0,0,image.getWidth(), image.getHeight(), this);

           }

Diese Methode ist allerdings relativ langsam.

Ich benötige 25 Frames pro Sekunde, was diese Routine nicht immer schafft.

Gibt es eine Möglichkeit, dieses zu optimieren?

Geschrieben

Hi,

Sorry, du hättest aber sagen müssen, dass es ein Java-Problem ist! So wie du dein Problem beschrieben hast, hörte es sich ncht nach einer Programmiersprache an!

Mit freundlichen Grüßen

mustiwebp

Geschrieben
Hi,

Sorry, du hättest aber sagen müssen, dass es ein Java-Problem ist! So wie du dein Problem beschrieben hast, hörte es sich ncht nach einer Programmiersprache an!

Mit freundlichen Grüßen

mustiwebp

Hehehehehe macht ja nichts.... Kann passieren... *ups*

Ich dachte, da ich BufferedImage schrieb, sei Java klar.. :upps

Hier mal die aktuelle Bildschirmausgabe auf meinem System (3ghz):

http://cpc-live.com/deinterlace3.png

Wie man sehen kann, ist das Display aber leider bei ca. 15-16 Frames pro Sekunde zu langsam... (Zum Screenshots schiessen reicht das zwar, könnte aber schneller sein)

Geschrieben

Habe es hinbekommen!

Nun habe ich sogar trotzdem satte 50 frames pro Sekunde!!!

Wie?

Code:

  protected void paintImage(Graphics g) {

      Graphics2D g2 = (Graphics2D)g;


// [snip]


           if (interlace){

              if (paint){

                  LaceImageA.getGraphics().drawImage(image, 0,0,image.getWidth(), image.getHeight(), this);

                  paint = false;

              } else {

                  LaceImageB.getGraphics().drawImage(image, 0,0,image.getWidth(), image.getHeight(), this);

                  paint = true;

              }

           }


// [snip]


              if (interlace){

                  g2.drawImage(LaceImageA,imageRect.x,imageRect.y,imageRect.width,imageRect.height,null);

                  g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.50f));

                  g2.drawImage(LaceImageB,imageRect.x,imageRect.y,imageRect.width,imageRect.height,null);

                  g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1.0f));

              }

              else

                  g2.drawImage(image,imageRect.x,imageRect.y,imageRect.width,imageRect.height,null);


//.....

Geschrieben

Auf dem (von mir hier in Java emulierten) Homecomputer gibt es die Möglichkeit, per "Page-flipping" interlaced Grafiken darzustellen.

Diese "Flackern" bei 25hz allerdings arg, und da ein heutiger Monitor keine 50hz mehr darstellen kann, verschiebt sich dann sogar im Emulator noch dieses Flackern um einige Zeilen.

Durch meine Methode geht dieses Flackern auf nahezu 0 (+- ein paar seltene Male, wenn der Resync nicht 100% korrekt ist) aber man sieht dennoch beide Bilder indem das eine mit 50% Transparenz auf das zweite gezeichnet wird.

deinterlace.gif

Wie man hier sehen kann, flackert das GIF anfangs zwischen 2 Bildern (Was im Computer 50x pro Sekunde passiert)

Aktiviere ich nun meine De-Interlace Funktion, steht das Bild stabil.

Geschrieben

Um mich da auch mal einzumischen,

das war schon das richtige Forum, und jeder der hier mehr als einmal im Jahr reinschaut der dürfte deine Threads ja auch mittlerweile kennen und weiß worum es geht.

War also meiner Meinung nach nichts falsch gemacht.

Geschrieben
Um mich da auch mal einzumischen,

das war schon das richtige Forum, und jeder der hier mehr als einmal im Jahr reinschaut der dürfte deine Threads ja auch mittlerweile kennen und weiß worum es geht.

War also meiner Meinung nach nichts falsch gemacht.

Menno, ich will aber AUCH mal was falsch machen...

(Apropos falsch machen: JavaCPC Desktop available as BETA! Mal eine BETA meines Emulators zum testen, macht hauptsächlich nur Sinn für Leute, die den CPC kennen... aber eventuell auch mal so ganz interessant)

Frohe Weihnachten an Alle!

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...