BlitzMax 1.41: SetMaskColor bei 64Bit System -> GELÖST

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

 

Xar

Betreff: BlitzMax 1.41: SetMaskColor bei 64Bit System -> GELÖST

BeitragSo, Aug 15, 2010 12:53
Antworten mit Zitat
Benutzer-Profile anzeigen
So, nachdem ich mich nun seit 3 Stunden ärgere und Foren durchforste, wage ich es, euch mit meinem Problem auf die Nerven zu gehen.

Ich habe kürzlich auf ein 64Bit Betriebssystem gewechselt (Win7). Vorher unter XP kein Problem, aber nun habe ich Schwierigkeiten beim SetMaskColor Befehl.

Ich lade diverse PNG-Bilder, wobei ich immer Pink (RGB 255,0,255) als transparente Farbe benutze (SetMaskColor 255,0,255). Ich verwende dieselben Zeichnungsprogramme und dasselbe Farbformat wie bis anhin (Photoshop Elements 5.0, habs aber auch mit LiveMotion oder ganz simpel mit Paint probiert - immer dasselbe).

Ich habe ein Testbild mit 2 Farben erstellt, neben Pink auch noch Weiss. Da funktioniert die transparente Farbe Pink bestens und wird erwartungsgemäss nicht angezeigt.

Sobald ich nun aber ein etwas komplexeres Bild mit mehreren Farben zusätzlich hineinnehme, zeigt es mir das Pink auch an. Zuerst dachte ich, die pinke Farbe stimmt durch die Farbkomplexität nicht mehr. Um das zu testen lade ich mein Bild zusätzlich als PixMap und lese einen pinken Bildpunkt aus, wandle die Farbe in RGB um lasse mir die Werte im Programm anzeigen, ich erhalte schön korrekt die Werte 255,0,255. Die Farbe sollte also stimmen.

Trotzdem wird sie nicht transparent. Und ich finde den Grund nicht.

Hier mein Testprogramm:

Code: [AUSKLAPPEN]
Graphics 1280,960
SetClsColor 0,0,0
Cls


SetMaskColor 255,0,255

' --------------------------- TEST BILD MIT NUR 2 FARBEN ------------------------------------

' Lade das Testbild als Image und PixMap:

Local BildLeer:TImage = LoadImage( "Bilder\TestBildLeer.png",MASKEDIMAGE)
Local PixMapLeer:TPixmap = LoadPixmap("Bilder\TestBildLeer.png" )

' Lies einen der Pixel aus dem PixMap, welcher transparent sein müsste und wandle in RGB um:

Farbe=ReadPixel( PixMapLeer,3,3 )
rLeer = Farbe Shr 16 & $FF
gLeer = Farbe Shr 8 & $FF
bLeer = Farbe & $FF

' Zeichne das Image und schreibe die RGB Farben des pinken Pixels darunter:

DrawImage BildLeer, 100, 100
DrawText "R:"+rLeer+"  /  G:"+gLeer+"  /  B:"+bLeer,100,300



' --------------------------- TEST BILD MIT MEHREREN FARBEN ------------------------------------

' Lade das Testbild als Image und PixMap:

Local BildVoll:TImage = LoadImage( "Bilder\TestBildVoll.png",MASKEDIMAGE)
Local PixMapVoll:TPixmap = LoadPixmap("Bilder\TestBildVoll.png" )

' Lies einen der Pixel aus dem PixMap, welcher transparent sein müsste und wandle in RGB um:

Farbe=ReadPixel( PixMapVoll,3,3 )
rVoll = Farbe Shr 16 & $FF
gVoll = Farbe Shr 8 & $FF
bVoll = Farbe & $FF

' Zeichne das Image und schreibe die RGB Farben des pinken Pixels darunter:

DrawImage BildVoll, 500, 100
DrawText "R:"+rVoll+"  /  G:"+gVoll+"  /  B:"+bVoll,500,300



Flip
WaitKey
End



Hier das Test-Bild mit nur wenig Farben:
user posted image


Hier das Test-Bild mit mehr Farben:
user posted image


Und hier das Resultat:
user posted image

Irgendwelche Ideen?

Vielen Dank
Dani
  • Zuletzt bearbeitet von Xar am So, Aug 15, 2010 21:54, insgesamt einmal bearbeitet

Xeres

Moderator

BeitragSo, Aug 15, 2010 13:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Dein zweites Testbild enthält einen Alpha-kanal. Entferne den. Wink
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

Xar

BeitragSo, Aug 15, 2010 13:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Oje, und wie mach ich das? Was ist denn ein Alphakanal? Muss ich den Speichern des Bildes wegmachen? Oder beim Laden des Bildes im Programmcode?

Beim Speichern sehe ich nirgends eine Möglichkeit, zu wählen, ob mit/ohne Alpha Kanal.

Gruss
Dani

mpmxyz

BeitragSo, Aug 15, 2010 13:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Ein Alphakanal bestimmt die Undurchsichtigkeit der Bildpixel.
Wenn ich eine PNG-Datei mit Paint.Net speichere, habe ich die Möglichkeit, es als 32 bit-Datei (mit alpha) oder als 24 bit-Datei (ohne alpha) zu speichern.
In dem Programm, welches du nutzt, müsste es ähnliche Einstellungsmöglichkeiten geben.
Du kannst aber auch etwas anderes machen:
Nutze einfach den Alphakanal und mache die (255,0,255)-Stellen 100% durchsichtig. (Alpha=0, am Besten schwarze Farbe)
mfG
mpmxyz
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer
  • Zuletzt bearbeitet von mpmxyz am So, Aug 15, 2010 13:25, insgesamt einmal bearbeitet

Xeres

Moderator

BeitragSo, Aug 15, 2010 13:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn das Bild bereits einen Alphakanal hat, erstellt Blitzmax vermutlich keinen mehr beim laden aus der Maskfarbe. Der Kanal gibt an, wie sichtbar ein Pixel ist.
In Gimp: Bild Laden, Ebene->Transparanz->Alphakanal entfernen, speichern.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

Xar

BeitragSo, Aug 15, 2010 13:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Hm, ok, danke. Die entsprechende Funktion hab ich im Photoshop Elements zwar noch nicht gefunden, weder bei den Ebenen noch sonst wo, aber immerhin funktioniert es, wenn ich sämtliche Ebenen "auf die Hintergrundebene reduziere" und das Bild dann als PNG abspeichere. Ich muss nur drauf achten, dass ich das Original dann nicht so abspeichere, um die Ebenen nicht alle dauerhaft zu verlieren.

Danke euch
Gruss
Dani

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group