pixel überschreiben

Für allgemeine Fragen zur Programmierung mit PureBasic.
5mware
Beiträge: 47
Registriert: 14.12.2015 15:16

pixel überschreiben

Beitrag von 5mware »

hi leute,

gibt es eine möglichkeit in pb, crossplattform, innerhalb einer image-zeichnung, zum beispiel einer offenen jpeg, einzelne pixel oder bereiche transparent zu machen? also die alpha-werte der pixel in der betroffenen stelle zu verändern, ohne die farben oder das gesamte bild ändern zu müssen?

quais sowas:

Code: Alles auswählen

If img
  If StartDrawing(ImageOutput(img))
    DrawingMode(#PB_2DDrawing_AlphaBlend)
    tempcolor = Point(mousex,mousey)
    maketransparent(tempcolor)
    Plot(mousex,mousey,tempcolor)
    StopDrawing()
  EndIf
EndIf
Benutzeravatar
man-in-black
Beiträge: 362
Registriert: 21.08.2006 17:39

Re: pixel überschreiben

Beitrag von man-in-black »

Hi,

wenns dir nur um den Farbwert geht, schmeiß den Alphawert doch einfach selbst raus.
Wie weit die Image-Lib Transparenz selbst unterstützt, mag ich gerade nicht testen :D .

Code: Alles auswählen

color = RGBA(20,100,200,200)

color_new = color - Alpha(color)*Pow(16,6)

Debug Hex(color)
Debug Hex(color_new)

Debug Alpha(color_new)

;---- oder

color_new = rgba(red(color),green(color),blue(color),0)

MFG
MIB
(hab alles, kann alles, weiß alles!!^^)

Bild
5mware
Beiträge: 47
Registriert: 14.12.2015 15:16

Re: pixel überschreiben

Beitrag von 5mware »

das ist mir schon klar. das problem ist nur, wenn ich den neu errechneten farbwert mittels plot an dieselbe stelle zeichne, scheint es nicht zu klappen. beispiel:

Code: Alles auswählen

; Originalfarbe aus der Position n auslesen. Dieser ist undurchsichtig. Also Alpha=255
color = Point(x,y)
; Zwischenfunktion, der wandelt jetzt den Alpha-Wert auf 0. Ohne probleme einfach zu machen.
color = removeAlpha(color)
; So jetzt wollen wir die neue Farbe (mit voller Transparenz) an dieselbe Stelle zeichnen
Plot(x,y,color)
Fazit: Der darunterliegende Wert (also das Originalwert) wird einfach beibehalten. Genau den will ich jedoch überschreiben. Also auch den Alpha-Wert des Pixels eben ändern.

Es geht also nicht darum, die Farbe an sich zu ändern, sondern nur den Alpha-Kanal des Farbpunktes.

Und genau das will nicht funktionieren. ich habe zwar eine aufwendige lösung erstellt, die sauber funktioniert. dieser ist aber bei größeren bildern, und bei bedarf von größeren fläschen, die transparent werden sollen, zu langsam. ich habe zwar an api sachen gedacht, brauche aber eine lösung die auf win,lin und mac läuft.
Benutzeravatar
man-in-black
Beiträge: 362
Registriert: 21.08.2006 17:39

Re: pixel überschreiben

Beitrag von man-in-black »

Hi,

dann doch PB anschmeißen.^^

Code: Alles auswählen

UsePNGImageEncoder()

CreateImage(0,200,200,32,255)   ;32!

StartDrawing(ImageOutput(0))

  DrawingMode(#PB_2DDrawing_AlphaChannel)   ;wäre genau dein Modus!

  Debug Hex(Point(50,50))

  For x = 0 To 20
    Plot(50+x,50+x,RGBA(0,0,0,0))
  Next

  Debug Hex(Point(50,50))

StopDrawing()

SaveImage(0,"xxx\bild.png",#PB_ImagePlugin_PNG)   ;PFAD! - wenn, dann natürlich ein Format, das Transparenz unterstützt!
MFG
MIB
Zuletzt geändert von man-in-black am 07.12.2017 21:28, insgesamt 1-mal geändert.
(hab alles, kann alles, weiß alles!!^^)

Bild
5mware
Beiträge: 47
Registriert: 14.12.2015 15:16

Re: pixel überschreiben

Beitrag von 5mware »

cool! thanks
Antworten