transparente image im speicher

Anfängerfragen zum Programmieren mit PureBasic.
delikanli_19_82
Beiträge: 173
Registriert: 30.11.2010 02:34

transparente image im speicher

Beitrag 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
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: transparente image im speicher

Beitrag 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!
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
delikanli_19_82
Beiträge: 173
Registriert: 30.11.2010 02:34

Re: transparente image im speicher

Beitrag 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.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: transparente image im speicher

Beitrag 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.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
delikanli_19_82
Beiträge: 173
Registriert: 30.11.2010 02:34

Re: transparente image im speicher

Beitrag 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
Antworten