png grayscale 16 bit
Verfasst: Freitag 6. März 2020, 18:12
Hallo,
ich habe für ein PC Spiel einen Karten-Editor geschrieben, mit dem man eine heightmap erstellen und alle Masken generieren kann, die das Spiel braucht um eine Karte lesen zu können. das Programm an sich funktioniert schon recht gut.
Das Problem ist die Anforderung an die heightmap: Sie muss eine 16bit Grayscale (ohne alphakanal) PNG Datei sein muss (sollte).
ich habe schon einiges probiert:
matplotlib/pyplot verwende ich um previews anzuzeigen, aber pyplot speichert auch grayscale as 24bit png
Pillow:
schmeißt mir zwar ein 16 bit Bild aus, aber das sieht nach einer Matrix aus schwarzen und weißen punkten aus und nicht wie die Karte, die rauskommen soll
imread mit 'I' liest dagegen karten von anderen ohne Probleme
bei
kommt auch nix sinnvolles heraus
die numpy arrays sind 1024x1024 mit Werten im Bereich von 0...65535 (also das bestätigen auch die print(heightmap.min(),heightmap.max()) Befehle die ich vor und hinter den entsprechenden Anweisungen gepackt habe.
Ich teste auf einer virtuellen Ubuntu Maschine (falls das von Relevanz ist).
ich habe für ein PC Spiel einen Karten-Editor geschrieben, mit dem man eine heightmap erstellen und alle Masken generieren kann, die das Spiel braucht um eine Karte lesen zu können. das Programm an sich funktioniert schon recht gut.
Das Problem ist die Anforderung an die heightmap: Sie muss eine 16bit Grayscale (ohne alphakanal) PNG Datei sein muss (sollte).
ich habe schon einiges probiert:
matplotlib/pyplot verwende ich um previews anzuzeigen, aber pyplot speichert auch grayscale as 24bit png
Pillow:
Code: Alles auswählen
heightmap.astype(numpy.uint16)
image = Image.fromarray(heightmap, mode='I;16') # genauso 'I'
image.save(os.path.join(map_folder,heightmap_file_name))
imread mit 'I' liest dagegen karten von anderen ohne Probleme
bei
Code: Alles auswählen
cv2.imwrite(os.path.join(map_folder,heightmap_file_name),heightmap)
die numpy arrays sind 1024x1024 mit Werten im Bereich von 0...65535 (also das bestätigen auch die print(heightmap.min(),heightmap.max()) Befehle die ich vor und hinter den entsprechenden Anweisungen gepackt habe.
Ich teste auf einer virtuellen Ubuntu Maschine (falls das von Relevanz ist).