8bit 256graustufen bitmap erstellen
8bit 256graustufen bitmap erstellen
hallo
wie aus der überschrift schon hervorgeht möchte ich ein 8bit bmp mit 256 graustufen erstellen und dieses dann als png abspeichern.
unter delphi gibt es die funktion "PixelFormat:=pf8bit" die es hier nicht gibt.
kann mir jemand weiterhelfen oder ein tipp geben wie womit es am besten und schnellsten geht???
schonmal danke für eventuelle hilfen
wie aus der überschrift schon hervorgeht möchte ich ein 8bit bmp mit 256 graustufen erstellen und dieses dann als png abspeichern.
unter delphi gibt es die funktion "PixelFormat:=pf8bit" die es hier nicht gibt.
kann mir jemand weiterhelfen oder ein tipp geben wie womit es am besten und schnellsten geht???
schonmal danke für eventuelle hilfen
Lazarus 1.0.14
FPC 2.6.2
unter Win7 64bit/Ubuntu 64bit
FPC 2.6.2
unter Win7 64bit/Ubuntu 64bit
-
- Beiträge: 770
- Registriert: Sa 21. Feb 2009, 13:46
- OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
- CPU-Target: 32Bit
Re: 8bit 256graustufen bitmap erstellen
Image1.Picture.Bitmap.PixelFormat:=pf8bit;
???
Aber du kannst auch ein 32 Bit Bitmap erstellen und dort halt nur grau draufmalen und dann
Image1.Picture.SavetoFile('irgendwas.png');
???
Aber du kannst auch ein 32 Bit Bitmap erstellen und dort halt nur grau draufmalen und dann
Image1.Picture.SavetoFile('irgendwas.png');
Code: Alles auswählen
Signatur := nil;
Re: 8bit 256graustufen bitmap erstellen
Das geht zwar schon, erstellt aber kein 8bpp sondern ein 24bpp PNG.MAC hat geschrieben: Aber du kannst auch ein 32 Bit Bitmap erstellen und dort halt nur grau draufmalen und dann
Image1.Picture.SavetoFile('irgendwas.png');
Wenn er wirklich eine 8bpp Datei braucht, kann OpBitmap helfen. Sonst geht's natürlich auch so.
Re: 8bit 256graustufen bitmap erstellen
ok hab mir mal opbitmap besorgt und folgenden code ausgeführt
er speichert zwar ab, aber ich kann die datei nicht öffnen bzw. habe auch keine vorschau?!?
Code: Alles auswählen
var
bit: topbitmap;
bx, by, i: integer;
begin
bit := topbitmap.Create;
bit.Height := 100;
bit.Width := 100;
bit.PixelFormat := pf8bit;
i := 0;
for bx := 0 to bit.Height - 1 do
begin
for by := 0 to bit.Width - 1 do
begin
bit.Pixels[bx, by] := i;
Inc(i);
if i = 255 then
i := 0;
end;
end;
bit.SaveToFile('c:\testt.png');
bit.Free;
Lazarus 1.0.14
FPC 2.6.2
unter Win7 64bit/Ubuntu 64bit
FPC 2.6.2
unter Win7 64bit/Ubuntu 64bit
Re: 8bit 256graustufen bitmap erstellen
Die Klasse TOpBitmap kann kein Bildformate, nimm TOPPicture ( uses ... opbitmap, opbitmapformats; )
Aber vielleicht erklärst du uns besser erst, was du genau willst. Vielleicht geht das auch viel einfacher.
Muss das Bild in Memory 8bit haben? In der Datei? Oder willst du nur einfach ein Bild aus Grauwerten erstellen?
Code: Alles auswählen
var OPP: TOPPicture;
var i, bx, by:integer;
begin
OPP:=TOPPicture.Create;
OPP.Bitmap.Width:=100;
OPP.Bitmap.Height:=100;
OPP.Bitmap.PixelFormat:=opbitmap.pf8bit;
OPP.Bitmap.ColorTable:=@Gray256Colors; //Grau Palette einhängen. 8bit ist nicht automatisch grau.
i:=0;
for bx := 0 to OPP.Bitmap.Height - 1 do
begin
for by := 0 to OPP.Bitmap.Width - 1 do
begin
TBitmapData8(OPP.Bitmap.Data).NativePixels[bx, by] := i; //statt die Farbe TColor direkt den Palettenindex setzen.
Inc(i);
if i = 255 then
i := 0;
end;
end;
OPP.SaveToFile('c:\testt.png');
OPP.Free;
end;
Muss das Bild in Memory 8bit haben? In der Datei? Oder willst du nur einfach ein Bild aus Grauwerten erstellen?
Re: 8bit 256graustufen bitmap erstellen
thx das klappt
und wie kann ich den palettenindex der einzelnen pixel auslesen??
mit
bekomme ich den tcolorwert
und wie kann ich den palettenindex der einzelnen pixel auslesen??
mit
Code: Alles auswählen
bitmap: toppicture;
begin
oop:= toppicture.Create;
oop.LoadFromFile('c:\10000.png');
showmessage(inttostr(oop.Bitmap.Pixels[0,0]));
Lazarus 1.0.14
FPC 2.6.2
unter Win7 64bit/Ubuntu 64bit
FPC 2.6.2
unter Win7 64bit/Ubuntu 64bit
Re: 8bit 256graustufen bitmap erstellen
Öhm, einfach umgekehrt?
P.S. Vielleicht erklärst du uns mal, was dein eigentliches Ziel ist. Vielleicht geht das viel einfacher.
S.a: http://www.tty1.net/smart-questions_de.html#goal" onclick="window.open(this.href);return false;
Code: Alles auswählen
if OPP.Bitmap.PixelFormat=opbitmap.pf8bit then
Idx:=TBitmapData8(OPP.Bitmap.Data).NativePixels[bx, by];
S.a: http://www.tty1.net/smart-questions_de.html#goal" onclick="window.open(this.href);return false;