Seite 1 von 1

pixel überschreiben

Verfasst: 07.12.2017 18:38
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

Re: pixel überschreiben

Verfasst: 07.12.2017 19:50
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

Re: pixel überschreiben

Verfasst: 07.12.2017 20:04
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.

Re: pixel überschreiben

Verfasst: 07.12.2017 20:39
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

Re: pixel überschreiben

Verfasst: 07.12.2017 21:00
von 5mware
cool! thanks