AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Hintergrundbild erstellen

Ein Thema von VkPenguin · begonnen am 13. Feb 2012 · letzter Beitrag vom 26. Feb 2012
Antwort Antwort
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.656 Beiträge
 
Delphi 12 Athens
 
#1

AW: Hintergrundbild erstellen

  Alt 16. Feb 2012, 07:31
Auch wenn es jetzt zu funktionieren scheint, möchte ich doch einmal spezielle Engines wie Andorra 2D in den Raum werfen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
VkPenguin

Registriert seit: 23. Dez 2011
150 Beiträge
 
Delphi XE7 Architect
 
#2

AW: Hintergrundbild erstellen

  Alt 16. Feb 2012, 22:17
Wie kommst du darauf, dass es funktioniert

Habe schon ein paar Sachen selbst versucht und will - wenn ich mal Zeit dazu habe - nochmal Google bemühen. Bisher bin ich noch nicht weitergekommen, habe mich nur nicht gemeldet, weil ich keine spezifische Frage hab und "hilfe!" ja nicht wirklich weiterhilft

Andorra hatte ich vor einiger Zeit schonmal im Auge, das erschien mir damals aber als zuviel Aufwand für das kleine Programm.. Jetzt ist es vielleicht nötig, ich befürchte nur, dass es sich nicht mit mSuM verträgt wie die meisten schönen Delphi-Techniken.

Vielleicht findet Popov ja auch noch was im Archiv, dann kann ich es mir da anschauen, an Codebeispielen konnte ich bisher immer am besten lernen
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#3

AW: Hintergrundbild erstellen

  Alt 17. Feb 2012, 00:04
Auch wenn ich es finden würde, es waren nur Experimente, keine Engine. Also erhoffe dir nicht zu viel. Ansonsten die Api nach Clip, Rect und Rgn durchsuchen. Vor allem die Bereiche Kombinieren.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.656 Beiträge
 
Delphi 12 Athens
 
#4

AW: Hintergrundbild erstellen

  Alt 17. Feb 2012, 07:41
Oder mit einer Maske arbeiten und so das Vordergrundbild "ausstanzen". Vielleicht bringt das hier Licht ins Dunkel: http://www.hitekdev.com/delphi/BITMAPANIMATION.html
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
VkPenguin

Registriert seit: 23. Dez 2011
150 Beiträge
 
Delphi XE7 Architect
 
#5

AW: Hintergrundbild erstellen

  Alt 17. Feb 2012, 12:23
Hi, danke für die Tipps. Ich verstehe die Texte zu den gesuchten Begriffen zwar noch nicht so ganz, da komme ich aber vielleicht noch hinter. Was mir gerade einfiel (wahrscheinlich funktioniert cliping auch so in der Art): Wenn ich wüsste, wie ich den Teil des Bildschirms, auf den das neue Bild gezeichnet werden soll, scanne, in ein Bild speichere und nachher zum übermalen lade müsste es doch gehen oder? Wobei ich irgendwie befürchte, dass es dann immernoch ruckeln wird, immerhin sind das ja auch unglaublich viele Berechnungen, die pro Sekunde gemacht werden müssten. Meint ihr, so könnte es funktionieren? Wenn ja, kann ich dann vielleicht Bild.LoadFromClipboardFormat nehmen?
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#6

AW: Hintergrundbild erstellen

  Alt 17. Feb 2012, 19:40
Als ich DeddyHs Link oben gelesen habe, ist mir noch eine andere Methode eingefallen mit der ich auch leicht experimentiert habe. Sie ist ein Zwischending zwischen dem was ich bereits oben beschrieben habe, also alles zuerst auf eine temporäre Bitmap zeichnen und dann das gesamte Ergebnis auf die Leinwand zeichnen, und eine Lochmaske aus Regionen, was etwas komplexer wäre.

Hier ein Beispiel mit den Hausmitteln von Delphi, anhand eines Balls der sich über einen Hintergrund bewegt. Beim zeichnen wird der alte Bereich vom letzten Schritt als Rect-Bereich gespeichert, der neue Bereich, auch als Rect-Bereich. Dann wird der kleinste gemeinsamer Rect-Bereich berechnet. Alles was gezeichnet wird, wird auf diesem gemeinsamen Bereich auf der Temporärbitmap gezeichnet. Dann wird das Ergebnis übertragen. Der Vorteil hier, es wird nur das gezeichnet was sich verändert hat. Allerdings wird hier grob gearbeitet, d. h. die kleinste gemeinsame Fläche, aber auf dieser eben alles.

Auch wenn das nicht die versprochene Lochmaske ist, so ist es das Prinzip. Zerst den alten Bereich reparieren, dann das Neue zeichnen, Ergebnis übertragen.

Delphi-Quellcode:
    //das Alte merken
    RecAlt := Rect(x, y, x+Bmp.Width, y+Bmp.Height);

    ...

    //das Neue berechnen
    RecNeu := Rect(x, y, x+Bmp.Width, y+Bmp.Height);
    //kleinste gemeinsame Fläche ermitteln
    UnionRect(RecZusammen, RecAlt, RecNeu); //!Bool Funktion, Abfrage?
    //auf Temporärgrafik arbeiten
    TBmp.Canvas.CopyRect(RecZusammen, HBmp.Canvas, RecZusammen);
    TBmp.Canvas.Draw(x, y, Bmp);
    //Ergebnis übertragen
    Canvas.CopyRect(RecZusammen, TBmp.Canvas, RecZusammen);
Das ist auch eine Antwort auf deine Frage, Vergiss das Scannen und die Zwischenablage. Warum Zwischenablage wenn du das, was du kopieren möchtest, in einer Variable speichern kannst. Und warum den alten Bereich scannen, nimm doch gleich die Quelle.
Angehängte Dateien
Dateityp: zip BallTest.zip (293,4 KB, 9x aufgerufen)
  Mit Zitat antworten Zitat
VkPenguin

Registriert seit: 23. Dez 2011
150 Beiträge
 
Delphi XE7 Architect
 
#7

AW: Hintergrundbild erstellen

  Alt 18. Feb 2012, 20:20
Hmm, vielen lieben Dank für Deine Mühe, aber irgendwie komme ich mir gerade schrecklich Dumm vor. Verstehe ich das richtig (Auf mein Problem übertragen):

- RecAlt ist die vohrige Position des Gegners bzw. der Rahmen darum (dafür müsste ich doch zuvor einmal den Gegner erst zeichnen oder nicht?)
- RecNeu ist die neue Position
- RecZusammen ist die Mischung aus RecNeu und dem Hintergrund (Aber wie funktioniert das Mischen? Woher weiß das Programm denn was wohin soll? Die Transparenzoptionen gehen doch im BMP-Format verloren, oder nicht? Deswegen benutzt ich ja PNG mit Transparenz)
- x ist die X-Position des Gegners
- Y " " Y- " " "
- BMP ist das Bild des Gegners (ist bei mir PNGImage, das macht aber nichts, oder?)
- TBMP ist das temporäre BMP
- HBMP ist das Hintergrundbild

Und ich müsste das ganze dann also mit *Pseudocode*
Delphi-Quellcode:
For I:=1 to Gegneranzahl Do
Begin
Altes merken
Neue Position berechnen
"verschieben"
End;
machen..? Das kann so doch nicht funktionieren ?! Bin ratlos
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:09 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz