(gelöst): Transparente Farbe
(gelöst): Transparente Farbe
Hallo,
wie teile ich PB mit, dass eine bestimmte Farbe hier rgb(255,0,255)
transparent sein soll.
Konkret:
Ich habe ein rechteckiges Bild eingelesen. Die Hintergrundfarbe des Rechtecks
ist pink - siehe oben. Der Vordergrund besteht aus Symbolen mit verschiedenen
Farben. Ich will das Bild jetzt mit DrawImage(drawimageID(bildnummer),x,y) darstellen,
so, dass der pinke Hintergrund des Bildes nicht mehr sichtbar ist.
Ich habe schon mit RGBA, Alpablend, usw rumprobiert, aber da habe ich noch nicht den
Durchblick.
Danke im voraus.
p.s. das Bild wird in einem Canvas dargstellt und es ist kein Sprite, wo man das mit
transparentSpriteColor oder so festlegen kann.
wie teile ich PB mit, dass eine bestimmte Farbe hier rgb(255,0,255)
transparent sein soll.
Konkret:
Ich habe ein rechteckiges Bild eingelesen. Die Hintergrundfarbe des Rechtecks
ist pink - siehe oben. Der Vordergrund besteht aus Symbolen mit verschiedenen
Farben. Ich will das Bild jetzt mit DrawImage(drawimageID(bildnummer),x,y) darstellen,
so, dass der pinke Hintergrund des Bildes nicht mehr sichtbar ist.
Ich habe schon mit RGBA, Alpablend, usw rumprobiert, aber da habe ich noch nicht den
Durchblick.
Danke im voraus.
p.s. das Bild wird in einem Canvas dargstellt und es ist kein Sprite, wo man das mit
transparentSpriteColor oder so festlegen kann.
Zuletzt geändert von Diogenes am 25.06.2014 18:54, insgesamt 1-mal geändert.
Re: Transparente Farbe
Diese Funktion ist wie du schon selbst geschrieben hast, nur in Sprites verfügbar.
Wenn es möglich ist, solltest du ein 32-Bit Image verwenden und deine Farbe "echt" transparent machen.
Dann kannst du das Image mit DrawingMode(#PB_2DDrawing_AlphaBlend) auch transparent darstellen.
Andern Falls kannst du auch mit CustomFilterCallback arbeiten:
Wenn es möglich ist, solltest du ein 32-Bit Image verwenden und deine Farbe "echt" transparent machen.
Dann kannst du das Image mit DrawingMode(#PB_2DDrawing_AlphaBlend) auch transparent darstellen.
Andern Falls kannst du auch mit CustomFilterCallback arbeiten:
Code: Alles auswählen
EnableExplicit
Global TransparentDrawingColor.i
Procedure.i TransparentDrawingColor_Callback(X.i, Y.i, Front.i, Back.i)
If Front & $FFFFFF = TransparentDrawingColor
ProcedureReturn Back
Else
ProcedureReturn Front
EndIf
EndProcedure
Procedure TransparentDrawingColor(Color.i)
TransparentDrawingColor = Color & $FFFFFF
DrawingMode(#PB_2DDrawing_CustomFilter)
CustomFilterCallback(@TransparentDrawingColor_Callback())
EndProcedure
Enumeration
#Window
#Gadget
#Image
EndEnumeration
CreateImage(#Image, 128, 128, 24, $FF00FF) ; Pinker Hintergrund
If StartDrawing(ImageOutput(#Image))
Circle(64, 64, 48, $00FF00) ; grüner Kreis
StopDrawing()
EndIf
OpenWindow(#Window, 0, 0, 800, 600, "WindowTitle", #PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
CanvasGadget(#Gadget, 0, 0, WindowWidth(#Window), WindowHeight(#Window))
If StartDrawing(CanvasOutput(#Gadget))
DrawImage(ImageID(#Image), 64, 64)
TransparentDrawingColor($FF00FF) ; Pinkt transparent machen für alle folgenden Draws
DrawImage(ImageID(#Image), 256, 64)
StopDrawing()
EndIf
Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
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
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Re: Transparente Farbe
Hallo STARGÅTE,
danke, das ist genau das, was ich wollte. Ich werde versuchen,
Deinen Code für meine Zwecke anzupassen.
Bin Ich eigentlich nur so ein Wundertier oder ist PureBasic und seine Nutzer so seltsam ?
Alle Funktionen, die in anderen Sprachen gang und gäbe sind,
(Tastatursteuerung, Farbtransparenz) sind in PB nicht implementiert oder nur umständlich
zu erreichen. Ich fand PB am Anfang gerade wegen seiner Mächtigkeit und Nähe zur
WINApi gut. Mittlerweile merke ich aber, wie viele Probleme ich damit habe.
Ich werde weiter kämpfen. Danke schön auf jeden Fall.
danke, das ist genau das, was ich wollte. Ich werde versuchen,
Deinen Code für meine Zwecke anzupassen.
Bin Ich eigentlich nur so ein Wundertier oder ist PureBasic und seine Nutzer so seltsam ?
Alle Funktionen, die in anderen Sprachen gang und gäbe sind,
(Tastatursteuerung, Farbtransparenz) sind in PB nicht implementiert oder nur umständlich
zu erreichen. Ich fand PB am Anfang gerade wegen seiner Mächtigkeit und Nähe zur
WINApi gut. Mittlerweile merke ich aber, wie viele Probleme ich damit habe.
Ich werde weiter kämpfen. Danke schön auf jeden Fall.
Wie mache ich denn eine Farbe echt transparent, wenn ich ein Bildchen mit Paint zeichne ??Wenn es möglich ist, solltest du ein 32-Bit Image verwenden und deine Farbe "echt" transparent machen.
Re: Transparente Farbe
Als BMP speichern geht da schonmal nicht. PNG ist das Format, weil 32 Bit den Alphakanal beinhalten.
Diese sind auch mit dem entsprechenden Plugin leicht einzulesen. Allerdings weiss ich nicht wo man das bei Paint macht,
bzw. ob der ueberhaupt als PNG abspeichern kann.
Ich nutze Gimp. Kostenlos und hat soviel Funktionen, dass ich wohl noch 2 weitere Leben brauche um die alle zu entdecken
Diese sind auch mit dem entsprechenden Plugin leicht einzulesen. Allerdings weiss ich nicht wo man das bei Paint macht,
bzw. ob der ueberhaupt als PNG abspeichern kann.
Ich nutze Gimp. Kostenlos und hat soviel Funktionen, dass ich wohl noch 2 weitere Leben brauche um die alle zu entdecken

PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom
Re: Transparente Farbe
Nun ich kann diesen Ball auch zurückspielen und dich fragen wieso du noch "umständliche" 24-Bit Images nutzt und nicht 32-Bit Images, die in zwischen "gang und gäbe" sind.Diogenes hat geschrieben:Alle Funktionen, die in anderen Sprachen gang und gäbe sind,(Tastatursteuerung, Farbtransparenz) sind in PB nicht implementiert oder nur umständlichzu erreichen. Ich fand PB am Anfang gerade wegen seiner Mächtigkeit und Nähe zur WINApi gut. Mittlerweile merke ich aber, wie viele Probleme ich damit habe. Ich werde weiter kämpfen. Danke schön auf jeden Fall.
Eine Farbe als Transparent zu definieren ist veraltet!
Was ist "Paint"?Diogenes hat geschrieben:Wie mache ich denn eine Farbe echt transparent, wenn ich ein Bildchen mit Paint zeichne ??

Wenn du ein richtiges Grafikprogramm (Photoshop, Gimp, Paint.net) nutzt, dann kannst du dort einen Alpha-Kanal hinzufügen.
Danach kannst du deine Bereiche Transparent machen, indem der Alpha-Wert dort 0 ist.
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
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
- TroaX
- Beiträge: 684
- Registriert: 08.03.2013 14:27
- Computerausstattung: PC: Ryzen 9 3950X, 96 GB RAM, RX6800XT, 2.5 TB SSD, 21:9 Display, Linux Mint | Lappi: Ryzen 7 5800H, 16 GB RAM, 1 TB SSD, Linux Mint
- Wohnort: NRW
- Kontaktdaten:
Re: Transparente Farbe
<OFFTOPIC>
Ich würde Paint.NET nehmen. GIMP ist dafür zu mächtig, was sich auch in der Laufzeitperformance niederschlägt. Auch wenn es gut ist. GIMP brauch wirklich lange beim Start, bis es verwendbar ist. Deswegen nutze ich Paint.NET für solche Kleinigkeiten. Gerade wenn man das mit mehreren Dateien machen muss
</OFFTOPIC>
Ich würde Paint.NET nehmen. GIMP ist dafür zu mächtig, was sich auch in der Laufzeitperformance niederschlägt. Auch wenn es gut ist. GIMP brauch wirklich lange beim Start, bis es verwendbar ist. Deswegen nutze ich Paint.NET für solche Kleinigkeiten. Gerade wenn man das mit mehreren Dateien machen muss

</OFFTOPIC>
PC: Ryzen 9 3950X | 96 GB RAM | RX6800XT | 2,5 TB NVMe | Linux Mint
Notebook: 16" 3:2 | Ryzen 7 5800H | 16 GB RAM | Radeon Vega | 1TB NVMe | Linux Mint
NAS: Fritz.Box 5690 Pro (Nur für Keepass-DB)
Coding: Purebasic, Spiderbasic, GDevelop, Javascript/Node
Notebook: 16" 3:2 | Ryzen 7 5800H | 16 GB RAM | Radeon Vega | 1TB NVMe | Linux Mint
NAS: Fritz.Box 5690 Pro (Nur für Keepass-DB)
Coding: Purebasic, Spiderbasic, GDevelop, Javascript/Node
Re: Transparente Farbe
Hallo,
über euch lachen
Ich habe also paint.net geladen, die pinken Bereiche übermalt mit AlphaChannel 0
(sieht aber immer noch pink aus), als 32 bit png abgespeichert , habe das png-plugin in
pb geladen und alle möglichen Drawing-Modes ausprobiert
Ergebnis alles bleibt schön pink mit Ausnahme von
DrawingMode(#PB_2DDrawing_AlphaChannel) , da verschwindet dann das ganze Bild.
Und nu ??
p.s. kann mir auch noch bitte einer erklären, wie die danke-Funktion hier im Board funktioniert
Ich habe schon mehrfach bei verschiedenen Hilfestellern auf den Dabke-Knopf gedrückt, dann werdeich umgeleitet auf eine weiße Seite und sonst passiert nichts. Auch der Danke-Zähler bei
dem Betreffenden geht nicht rauf.
Eine Farbe als Transparent zu definieren ist veraltet!
Kommt Ihr erst 'mal in meine Jahre (ü60), dann werden Eure Enkel genausoWas ist "Paint"?![]()
über euch lachen

Ich habe also paint.net geladen, die pinken Bereiche übermalt mit AlphaChannel 0
(sieht aber immer noch pink aus), als 32 bit png abgespeichert , habe das png-plugin in
pb geladen und alle möglichen Drawing-Modes ausprobiert
Ergebnis alles bleibt schön pink mit Ausnahme von
DrawingMode(#PB_2DDrawing_AlphaChannel) , da verschwindet dann das ganze Bild.
Code: Alles auswählen
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Procedure ZE_PUNKT(sp,nr,art)
; Stichpunkte anzeigen
; art 8=grau; 9=gelb als Stich
StartDrawing(CanvasOutput(#cv001))
;DrawingMode(#PB_2DDrawing_AlphaBlend)
;DrawingMode(#PB_2DDrawing_AllChannels)
DrawingMode(#PB_2DDrawing_AlphaClip)
;DrawingMode(#PB_2DDrawing_AlphaChannel)
;DrawingMode(#PB_2DDrawing_XOr)
;RGBA(255,0,255,0)
If sp=1
If nr=1 :DrawAlphaImage(ImageID(art),508,318):EndIf
If nr=2 :DrawImage(ImageID(art),618,318):EndIf
If nr=3 :DrawImage(ImageID(art),728,318):EndIf
If nr=4 :DrawImage(ImageID(art),838,318):EndIf
EndIf
; --
If sp=2
If nr=1 :DrawImage(ImageID(art),508,370):EndIf
If nr=2 :DrawImage(ImageID(art),618,370):EndIf
If nr=3 :DrawImage(ImageID(art),728,370):EndIf
If nr=4 :DrawImage(ImageID(art),838,370):EndIf
EndIf
StopDrawing()
EndProcedure
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
p.s. kann mir auch noch bitte einer erklären, wie die danke-Funktion hier im Board funktioniert
Ich habe schon mehrfach bei verschiedenen Hilfestellern auf den Dabke-Knopf gedrückt, dann werdeich umgeleitet auf eine weiße Seite und sonst passiert nichts. Auch der Danke-Zähler bei
dem Betreffenden geht nicht rauf.
Re: Transparente Farbe
Übermalen mit AlphaChannel 0 bingt nichts, denn dann malst du ja transparente Farbe auf dein Pink, also bleibts pink.Diogenes hat geschrieben:Ich habe also paint.net geladen, die pinken Bereiche übermalt mit AlphaChannel 0
Wenn du dein Image geladen hast, musst du erst mal einen Alpha-Kanal hinzufügen (wir das Bild ja nicht von anfang an haben, wenns n BMP ist).
Dann kannst du deine pinken Bereiche auswählen (zB mit einem Zauberstift, der alle gleichen Farben umrandet).
Dann kannst du diese Bereiche löschen, dann sollte die Farbe komplett weg sein, und so n Schachbrett erscheinen:

Zum Dankezähler:
Warum du auf eine weiße Seite kommst weiß ich nicht, zählen tuts aber

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
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Re: Transparente Farbe
Hallo,
@STARGÅTE
jetzt hat's geklappt, wieder etwas gelernt, danke.
@STARGÅTE
jetzt hat's geklappt, wieder etwas gelernt, danke.
Re: (gelöst): Transparente Farbe
Hallo, ich weis nicht obs dir was bringt oder ob ich nach dem der thread gelöst wurde total am Thema vorbeischieße aber es gibt auch noch diesen befehl der aber wiederum die Intensität des kompletten sprites ändert
DisplayTranslucentSprite(#Sprite, x, y, Intensitaet)
dort ist die Transparenz implementiert und ist kein drawingmode von nöten.
DisplayTranslucentSprite(#Sprite, x, y, Intensitaet)
dort ist die Transparenz implementiert und ist kein drawingmode von nöten.
The World is Cyber