Entwickler-Ecke
Multimedia / Grafik - fehler bei Funktion um als Grayscale abzuspeichern.
nepleurepas - Do 18.09.08 22:00
Titel: fehler bei Funktion um als Grayscale abzuspeichern.
Hallo,
habe folgende procedure zur Umwandlung in eine 8bitgrayscale gefunden:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55:
| procedure TForm1.Button1Click(Sender: TObject); type TLogPal = record lpal : TLogPalette; colorSpace : Array[0..255] of TPaletteEntry; end; var bmp : TBitmap; pal : TLogPal; iCount : integer; begin Image1.Picture.LoadFromFile('my_picture.bmp');
pal.lpal.palVersion:=$300; pal.lpal.palNumEntries := 256; for iCount := 0 to 255 do with pal.lpal.palPalEntry[iCount] do begin peRed := iCount; peGreen := iCount; peBlue := iCount; end;
bmp := TBitmap.Create; try bmp.PixelFormat := pf8bit;
bmp.Width := Image1.Picture.Width; bmp.Height := Image1.Picture.Height;
bmp.Palette := CreatePalette(pal.lpal);
bmp.Canvas.Draw(0,0,Image1.Picture.Graphic);
bmp.SaveToFile('my_picture-8bit.bmp');
finally bmp.Free; end; end; |
diese funktioniert auch soweit. Nun wollte ich sie in mein programm einbauen, jedoch, ohne den Umweg über ein TImage:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53:
| procedure converttograyscale(var test: Tbitmap); type TLogPal = record lpal : TLogPalette; colorSpace : Array[0..255] of TPaletteEntry; end; var bmp : TBitmap; pal : TLogPal; iCount : integer; begin
pal.lpal.palVersion:=$300; pal.lpal.palNumEntries := 256; for iCount := 0 to 255 do with pal.lpal.palPalEntry[iCount] do begin peRed := iCount; peGreen := iCount; peBlue := iCount; end;
bmp := TBitmap.Create; try bmp.PixelFormat := pf8bit;
bmp.Width := test.Width; bmp.Height := test.Height;
bmp.Palette := CreatePalette(pal.lpal);
bmp.Canvas.Draw(0,0,test); test:= bmp;
finally bmp.Free; end; end; |
Nun stürzt das Programm in der Zeile
ab. Woran liegt dies?
Danke für Antworten
Stefan
Boldar - Do 18.09.08 22:02
Welche Fehlermeldung??
nepleurepas - Do 18.09.08 22:05
Boldar hat folgendes geschrieben: |
Welche Fehlermeldung?? |
"Access violation at adress 0041F27D in module project1.exe"
Narses - Do 18.09.08 22:11
Titel: Re: fehler bei Funktion um als Grayscale abzuspeichern.
Moin!
Ähm, das sind Objekte, da kann keine einfache Zuweisung machen... :? Probier das mal so:
nepleurepas hat folgendes geschrieben: |
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| procedure converttograyscale(ABitmap: TBitmap); begin bmp.Canvas.Draw(0,0,ABitmap); ABitmap.Assign(bmp); | |
Und das
var beim Parameter kannst du dir auch sparen,
TBitmap ist eh ein Zeiger. ;)
cu
Narses
nepleurepas - Do 18.09.08 22:22
Titel: Re: fehler bei Funktion um als Grayscale abzuspeichern.
awright, da hab ich wohl wieder was fundamentales gelernt. Ne Frage:
Bei
http://www.delphi-treff.de/sprachen/object-pascal/zugriff-auf-objekte/
geht doch
auto1:= auto2 auch. Und das sind doch eigentlich auch Objekte?
---
Moderiert von
Narses: Beiträge zusammengefasst---
Narses hat folgendes geschrieben: |
Ähm, das sind Objekte, da kann keine einfache Zuweisung machen... :? Probier das mal so: |
Das ändert leider nichts an der Fehlermeldung :-(.
Narses - Do 18.09.08 22:43
Titel: Re: fehler bei Funktion um als Grayscale abzuspeichern.
Moin!
Klar kann man die Zeiger kopieren, das ist auch nicht das Problem. ;) Das Problem kriegst du erst, wenn du bmp freigibst, weil du dann nämlich ein freigegebenes Objekt ablieferst, das gibt dann auf die Finger. :idea: :D
nepleurepas hat folgendes geschrieben: |
Das ändert leider nichts an der Fehlermeldung :-(. |
Grade ausprobiert, die Prozedur läuft einwandfrei. ;)
Der Fehler muss woanders liegen. :nixweiss:
cu
Narses
nepleurepas - Do 18.09.08 22:52
Titel: Re: fehler bei Funktion um als Grayscale abzuspeichern.
aja habs, danke. Nur n tippfehler.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!