Вот тут, чем больше загружаемая картинка тем больше памяти занимает программа, доходило аж до 30 МБ. Наверное чтото тут не правильно.
| Код | procedure TForm1.ListBox1Click(Sender: TObject); var f : TFileStream; w, h, ww : word; Exte : shortstring; b1, b2 : Byte; begin Image1.Picture.LoadFromFile(ListBox1.Items[ListBox1.itemindex]); Exte := LowerCase(ExtractFileExt(ListBox1.Items[ListBox1.itemindex])); if (Exte = '.bmp') then begin try f := TFileStream.Create(ListBox1.Items[ListBox1.itemindex], fmOpenRead or fmShareDenyWrite); f.Seek(18, soFromBeginning); f.ReadBuffer(w, SizeOf(w)); f.ReadBuffer(h, SizeOf(h)); finally f.Free; end; end; if (Exte='.jpg') or (Exte='.jpeg') then begin try f := TFileStream.Create(ListBox1.Items[ListBox1.itemindex], fmOpenRead or fmShareDenyWrite); f.Seek(2, soBeginning); ww := 2; repeat f.Seek(ww - 2, soFromCurrent); f.ReadBuffer(b1, 1); f.ReadBuffer(b2, 1); if (b1 <> $FF) or (b2 = $00) or (b2 = $FF) then Begin repeat f.Position := f.Position - 1; f.ReadBuffer(b1, 1); f.ReadBuffer(b2, 1); until ((f.Position + 2) > f.Size) or ((b1 = $FF) and (b2 <> $00) and (b2 <> $FF)); if (f.Position + 2) > f.Size then Break end; f.ReadBuffer(ww, 2); ww := SwapWord(ww); until ((b1 = $FF) and (b2 in [$C0, $C1, $C2])) or ((f.Position + ww + 4) > f.Size); f.Seek(1, soFromCurrent); f.ReadBuffer(h, 2); f.ReadBuffer(w, 2); h := SwapWord(h); w := SwapWord(w); finally f.Free; end; end;
Label5.Caption := 'Name: '+ExtractFileName (ListBox1.Items[ListBox1.itemindex]); Label3.Caption := 'Resolution: '+InttoStr(w)+' x '+inttostr(h); Label1.Caption:= format('Size: %0.1f КB', [GetFileSizeByName(ListBox1.Items[ListBox1.itemindex])/1024]); end;
|
|