Seite 1 von 1
transparente image im speicher
Verfasst: 24.07.2011 20:39
von delikanli_19_82
hallo leute,
habe eine verständnisfrage:
es gibt einige png bilder die transparente bestandteile enthalten.
diese sollen nun in einen temporären image gezeichnet werden und dieser liegt dann erstmal im speicher. bei bedarf sollen ausschnitte aus diesem temporären image mit GrabImage wieder ausgelesen und bei einem anderen image gezeichnet werden. dabei sollen die transparentenbestandteile erhalten bleiben.
statt dessen aber werden genau diese anteile schwarz gezeichnet. die frage ist wie kann ich dafür sorgen, das diese temporären anteile auch weiterhin beibehalten werden?
mfg
kurt
Re: transparente image im speicher
Verfasst: 24.07.2011 20:48
von STARGÅTE
Alle Images müssen im 32-Bit Format geladen/erstellt werden.
Beim Zeichnen musst du #PB_2DDrawing_AlphaBlend usw. verwenden.
Ohne Code kann man aber nichts näheres dazu sagen!
Re: transparente image im speicher
Verfasst: 25.07.2011 01:18
von delikanli_19_82
das mit alphablend ist mir bekannt.
das problem tritt aber auf, das bereits 32bit transparente bilder in einen einzigen image geladen werden, das temporäer ist.
dannach soll aus diesem image ausschnitte per grabimage kopiert und in ein anderes image gezeichnet werden.
das mit alphablend funktioniert generell ja gut, aber das problem ist eben, das die kopien aus einem image herauskopiert werden und gerade in diesem image liegen die bilder dann eben nicht mehr transparent vor.
ich würde gerne ein code dazu vorstellen, aber es ist viel zu umfangreich.
um eigene gadgets zu generieren, zum biespiel scroller, werden die einzelnen bestandteile wie button, balken, hintergrund etc. in einem png image geladen.
in einem weiteren png image werden grafiken für CHECKBOX, RADIOBOX geladen.
damit nicht zuviele images geladen werden, wird im speicher ein zentraler image angelegt in dem beide pngs unterinander abgelegt werden.
nun wird beim zeichnen einer "LISTENANSICHT" die nötigen bildfragmente aus diesem temporären bild per grabimage gelesen und gezeichnet.
das obige beispiel ist stark vereinfacht.
Re: transparente image im speicher
Verfasst: 25.07.2011 03:23
von STARGÅTE
Also hier funktioniert alles normal:
Code: Alles auswählen
Enumeration
#Window
#Gadget
#Image_Original
#Image_Ausschnitt
#Image_Neu
EndEnumeration
CreateImage(#Image_Original, 256, 256, 32|#PB_Image_Transparent)
StartDrawing(ImageOutput(#Image_Original))
DrawingMode(#PB_2DDrawing_Transparent|#PB_2DDrawing_AlphaBlend)
Circle(128, 128, 128, $800000FF)
StopDrawing()
GrabImage(#Image_Original, #Image_Ausschnitt, 0, 0, 128, 128)
CreateImage(#Image_Neu, 256, 256, 32|#PB_Image_Transparent)
StartDrawing(ImageOutput(#Image_Neu))
DrawingMode(#PB_2DDrawing_Transparent|#PB_2DDrawing_AlphaBlend)
DrawImage(ImageID(#Image_Ausschnitt), 64, 64)
StopDrawing()
OpenWindow(#Window, 0, 0, ImageWidth(#Image_Neu), ImageHeight(#Image_Neu), "Image", #PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
ImageGadget(#Gadget, 0, 0, ImageWidth(#Image_Neu), ImageHeight(#Image_Neu), ImageID(#Image_Neu))
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
Das Image wird erstellt und ein Transparenter Kreis gezeichnet.
Danach schneide ich ein neues Image mit GrabImage daraus aus, Transparenz bleibt.
Dann mache ich ein neues leeres Image und packe den Ausschnitt da rein, Transparenz bleibt.
Wie gesagt, solange du dein Fehler nicht in einem Beispiel reproduzieren kannst, kann man dir nicht weiter helfen.
Re: transparente image im speicher
Verfasst: 25.07.2011 17:39
von delikanli_19_82
dein beispiel hat mir sehr geholfen, das problem ist beseitigt. vielen dank.
das ergebnis kannst du als test-exe hier herunterladen:
www.gonuldefterim.de/downloads/test_list.exe
zum testen der betroffenen funktion drück auf F8. Es wächselt zwichen, CHECKABLE, OTIONAL und Normalansicht.
F1 fügt einen neuen eintrag ein. F2 überschreibt einen eintrag. F3 zeigt die liste an, F4 versteckt es. F5 setzt bei allen Einträgen den Haken und F6 entfent den Haken wieder. F7 ändern die Scrolleransicht.
um die Tastenfunktionen nutzen zu können, klick einmal auf die liste, um dem CanvasGadget den Fokus zuzuweisen.
die Tastaturroutine unterstüzt in diesem beispiel nur die deutsche qwertz-tastatur. für andere tastaturlayouts muss ich erstmal neue keymaps anlegen. das ist eine menge arbeit.
die hier vorliegende listenmodul ist nur ein teil meines toolkits an dem ich seit geraumer zeit arbeite. es gibt noch viel zu tun. nun ja...
mfg
kurt