AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia SBF Datei mit zwei JPG Bildern auslesen
Thema durchsuchen
Ansicht
Themen-Optionen

SBF Datei mit zwei JPG Bildern auslesen

Offene Frage von "hsdkit111"
Ein Thema von hsdkit111 · begonnen am 28. Mär 2012 · letzter Beitrag vom 15. Apr 2012
 
hsdkit111

Registriert seit: 12. Aug 2009
11 Beiträge
 
#3

AW: SBF Datei mit zwei JPG Bildern auslesen

  Alt 28. Mär 2012, 19:46
Hallo Andreas,
das erste Bild habe ich wie folgt ausgelsesen und auch speichern können, DANKE!


var
finfo: TGFL_FILE_INFORMATION;
lp: TGFL_LOAD_PARAMS;
gfl_bmp: PGFL_BITMAP;
e: GFL_ERROR;
filename,zieldunkel: string;
bmp,bmp2: TBitmap;

x, y, k: Integer;
LineSrc: Pointer;
LineDest: Pointer;
LineIn: PLine1;
LineOut: PByteArray;
Mask1: Byte;
Mask: Byte;
pal: PLogPalette;
w1,w2,l1,l2,l3,i, bpp: Integer;
Arect: TRect;
begin
gflEnableLZW(GFL_TRUE);
filename := original.Text;
l1:=length(zieldatei.Text);
gflGetDefaultLoadParams(lp);
lp.ColorModel := GFL_BGR;
lp.LinePadding := 4;
e := gflLoadBitmap(PChar(filename), gfl_bmp, lp, finfo);
if (e <> gfl_no_error) then begin
MessageDlg('File not readable: ' + string(gflGetErrorString(e)), mtError, [mbOK], 0);
exit;
end;
pal := nil;

if (gfl_bmp.Btype = GFL_BINARY) then begin
bpp := 1;
end else begin
bpp := gfl_bmp.BytesPerPixel * 8;
end;
if not (bpp in [1, 4, 8, 24, 32]) then begin
MessageDlg('Only 1, 4, 8, 24 or 32 BitsPerPixel are supported in this demo !', mtError, [mbOK], 0);
gflFreeBitmap(gfl_bmp);
exit;
end;

///////////////////
// Create Delphi Bitmap. If paletted, minimize memory by setting size after pixel format
bmp := TBitmap.Create;
bmp.PixelFormat := IntToPixelFormat(bpp);
bmp.Width := gfl_bmp.Width;
bmp.Height := gfl_bmp.Height;
w1:=round(bmp.Width div 800);
If w1 = 1 then
w1:=2;
dimension.Text:=inttostr(w1);

NewPalette := 0;
//-------------------------------------
//Fixed. I. Scollar al001@mail1.rrz.uni-koeln.de 6.3.2002


case bmp.PixelFormat of

//-------------------
pf1bit:
begin
try
//pf1bit has a bug. It's palette has only zero entries
GetMem(pal, sizeof(TLogPalette) + sizeof(TPaletteEntry) * 256);
pal.palVersion := $300;
pal.palNumEntries := 2;
for i := 0 to 1 do with pal.palPalEntry[i] do begin
peRed := i * 255; peGreen := i * 255; peBlue := i * 255;
peFlags := PC_NOCOLLAPSE;
end;
if (NewPalette <> 0) then
DeleteObject(NewPalette);
NewPalette := CreatePalette(pal^);
finally
FreeMem(pal);
end;
DeleteObject(bmp.ReleasePalette);
bmp.Palette := NewPalette;

//set canvas to white, since positive image usually wanted
ARect := Bounds(0, 0, bmp.Width, bmp.Height);
bmp.canvas.Brush.Color := clWhite;
bmp.Canvas.FillRect(ARect);

Mask1 := 128; //leftmost bit set

for y := 0 to gfl_bmp.Height - 1 do begin
move( Pointer(Integer(gfl_bmp.data) + (y * gfl_bmp.BytesPerLine))^,
bmp.Scanline[y]^, gfl_bmp.BytesPerLine);
end;
Clipboard.Assign(bmp);
Imageen1.Proc.PasteFromClipboard;
Image.Picture.Bitmap := bmp;
Application.ProcessMessages;
ImageEn5.proc.PasteFromClipboard;
imageen5.Update;
ImageEnIO2.Params.JPEG_Quality:=100;
ImageEnIO2.Params.JPEG_Progressive:=True;
If strtoInt(glaetten.Text) > 0 then
ImageEnIO2.Params.JPEG_Smooth:=strtoint(glaetten.T ext); //.Params.JPEG_Quality:=100;
ImageEnIO2.SaveToFile(zieldatei.Text);
while not fileexists(zieldatei.text) do
ImageEnIO2.SaveToFile(zieldatei.Text);
while fileexists(original.text) do
deleteFile(original.Text);
clipboard.Clear;
If dunkelja.Checked = TRUE then begin
If strtoint(dunkel.Text) <> 0 then begin
Application.ProcessMessages;
imageen1.Proc.GammaCorrect(0.1, [iecRed,iecGreen,iecBlue]);
imageen1.Update;
image1.Picture.Bitmap:=imageen1.Bitmap;
ImageEnIO1.Params.JPEG_Quality:=100;
ImageEnIO1.Params.JPEG_Progressive:=True;
If strtoInt(glaetten.Text) > 0 then
ImageEnIO1.Params.JPEG_Smooth:=strtoint(glaetten.T ext); //.Params.JPEG_Quality:=100;
ImageEnIO1.SaveToFile(zieldunkel);
clipboard.Clear;
end;
end;
end;

//-------------------
pf4Bit:
begin
try
GetMem(pal, sizeof(TLogPalette) + sizeof(TPaletteEntry) * 256);
pal.palVersion := $300;
pal.palNumEntries := 16;
for i := 0 to 15 do with pal.palPalEntry[i] do begin
peRed := gfl_bmp.ColorMap^.Red[i];
peGreen := gfl_bmp.ColorMap^.Green[i];
peBlue := gfl_bmp.ColorMap^.Blue[i];
peFlags := PC_NOCOLLAPSE;
end;
if (NewPalette <> 0) then
DeleteObject(NewPalette);
NewPalette := CreatePalette(pal^);
finally
FreeMem(pal);
end;
DeleteObject(bmp.ReleasePalette);
bmp.Palette := NewPalette;

for y := 0 to gfl_bmp.Height - 1 do begin
move( Pointer(Integer(gfl_bmp.data) + (y * gfl_bmp.BytesPerLine))^,
bmp.Scanline[y]^, gfl_bmp.BytesPerLine);
end;
Clipboard.Assign(bmp);
Image.Picture.Bitmap := bmp;
Imageen1.Proc.PasteFromClipboard;
Application.ProcessMessages;
ImageEn5.proc.PasteFromClipboard;
imageen5.Update;
ImageEnIO2.Params.JPEG_Quality:=100;
ImageEnIO2.Params.JPEG_Progressive:=True;
If strtoInt(glaetten.Text) > 0 then
ImageEnIO2.Params.JPEG_Smooth:=strtoint(glaetten.T ext); //.Params.JPEG_Quality:=100;
ImageEnIO2.SaveToFile(zieldatei.Text);
while not fileexists(zieldatei.text) do
ImageEnIO2.SaveToFile(zieldatei.Text);
while fileexists(original.text) do
deleteFile(original.Text);
clipboard.Clear;
If dunkelja.Checked = TRUE then begin
If strtoint(dunkel.Text) <> 0 then begin
Application.ProcessMessages;
imageen1.Proc.GammaCorrect(0.1, [iecRed,iecGreen,iecBlue]);

imageen1.Update;
image1.Picture.Bitmap:=imageen1.Bitmap;
ImageEnIO1.Params.JPEG_Quality:=100;
ImageEnIO1.Params.JPEG_Progressive:=True;
If strtoInt(glaetten.Text) > 0 then
ImageEnIO1.Params.JPEG_Smooth:=strtoint(glaetten.T ext); //.Params.JPEG_Quality:=100;
ImageEnIO1.SaveToFile(zieldunkel);
clipboard.Clear;
end;
end;
end;

//-------------------
pf8Bit:
begin
if gfl_bmp.ColorMap <> nil then begin
try
GetMem(pal, sizeof(TLogPalette) + sizeof(TPaletteEntry) * 256);
pal.palVersion := $300;
pal.palNumEntries := 256;
for i := 0 to 255 do with pal.palPalEntry[i] do begin
peRed := gfl_bmp.ColorMap^.Red[i];
peGreen := gfl_bmp.ColorMap^.Green[i];
peBlue := gfl_bmp.ColorMap^.Blue[i];
peFlags := PC_NOCOLLAPSE;
end;
if (NewPalette <> 0) then
DeleteObject(NewPalette);

NewPalette := CreatePalette(pal^);
finally
FreeMem(pal);
end;
end else begin
{PCX bug in GflLib, pcx has no color palette, so make gray palette}
try
GetMem(pal, sizeof(TLogPalette) + sizeof(TPaletteEntry) * 256);
pal.palVersion := $300;
pal.palNumEntries := 256;
for i := 0 to 255 do begin
pal.palPalEntry[i].peRed := i;
pal.palPalEntry[i].peGreen := i;
pal.palPalEntry[i].peBlue := i;
pal.palPalEntry[i].peFlags := PC_NOCOLLAPSE;
end;
if (NewPalette <> 0) then
DeleteObject(NewPalette);
NewPalette := CreatePalette(pal^);
finally
FreeMem(pal);
end;
end;

DeleteObject(bmp.ReleasePalette);
bmp.Palette := NewPalette;
// Copy Pixel Data
for y := 0 to gfl_bmp.Height - 1 do
// Pointer to Scanline of TGFL_Bitmap
move( Pointer(Integer(gfl_bmp.data) + (y * gfl_bmp.BytesPerLine))^,
// Pointer to Scanline of TBitmap
bmp.Scanline[y]^, gfl_bmp.BytesPerLine);
Clipboard.Assign(bmp);
Imageen1.Proc.PasteFromClipboard;
Image.Picture.Bitmap := bmp;
Application.ProcessMessages;
ImageEn5.proc.PasteFromClipboard;
imageen5.Update;
ImageEnIO2.Params.JPEG_Quality:=100;
ImageEnIO2.Params.JPEG_Progressive:=True;
If strtoInt(glaetten.Text) > 0 then
ImageEnIO2.Params.JPEG_Smooth:=strtoint(glaetten.T ext); //.Params.JPEG_Quality:=100;
ImageEnIO2.SaveToFile(zieldatei.Text);
while not fileexists(zieldatei.text) do
ImageEnIO2.SaveToFile(zieldatei.Text);
while fileexists(original.text) do
deleteFile(original.Text);
clipboard.Clear;
If dunkelja.Checked = TRUE then begin

If strtoint(dunkel.Text) <> 0 then begin
Application.ProcessMessages;
imageen1.Proc.GammaCorrect(0.1, [iecRed,iecGreen,iecBlue]);

imageen1.Update;
image1.Picture.Bitmap:=imageen1.Bitmap;
ImageEnIO1.Params.JPEG_Quality:=100;
ImageEnIO1.Params.JPEG_Progressive:=True;
If strtoInt(glaetten.Text) > 0 then
ImageEnIO1.Params.JPEG_Smooth:=strtoint(glaetten.T ext); //.Params.JPEG_Quality:=100;
ImageEnIO1.SaveToFile(zieldunkel);
clipboard.Clear;
end;
end;
end;
//-------------------
// 24 + 32 Bit images
pf24Bit, pf32Bit:
begin
for y := 0 to gfl_bmp.Height - 1 do begin
// get Pointer to Scanlines
lineSrc := Pointer(Integer(gfl_bmp.data) + (y * gfl_bmp.BytesPerLine));
lineDest := bmp.Scanline[y];
// copy Pixel Data
move(lineSrc^, lineDest^, gfl_bmp.BytesPerLine);
end;
Clipboard.Assign(bmp);
Image.Picture.Bitmap := bmp;
Imageen1.Proc.PasteFromClipboard;
Application.ProcessMessages;
ImageEn5.proc.PasteFromClipboard;
imageen5.Update;
ImageEnIO2.Params.JPEG_Quality:=100;
ImageEnIO2.Params.JPEG_Progressive:=True;
If strtoInt(glaetten.Text) > 0 then
ImageEnIO2.Params.JPEG_Smooth:=strtoint(glaetten.T ext); //.Params.JPEG_Quality:=100;
ImageEnIO2.SaveToFile(zieldatei.Text);
while not fileexists(zieldatei.text) do
ImageEnIO2.SaveToFile(zieldatei.Text);
while fileexists(original.text) do
deleteFile(original.Text);
clipboard.Clear;
If dunkelja.Checked = TRUE then begin
If strtoint(dunkel.Text) <> 0 then begin
Application.ProcessMessages;
imageen1.Proc.GammaCorrect(0.1, [iecRed,iecGreen,iecBlue]);
imageen1.Update;
image1.Picture.Bitmap:=imageen1.Bitmap;
ImageEnIO1.Params.JPEG_Quality:=100;
ImageEnIO1.Params.JPEG_Progressive:=True;
If strtoInt(glaetten.Text) > 0 then
ImageEnIO1.Params.JPEG_Smooth:=strtoint(glaetten.T ext); //.Params.JPEG_Quality:=100;
ImageEnIO1.SaveToFile(zieldunkel);
clipboard.Clear;
end;
end;
end;
end; {case pixelformat}



end;


// Free Resources
bmp.Free;
gflFreeBitmap(gfl_bmp);
  Mit Zitat antworten Zitat
 

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:14 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz