2 man2002ua тут наверно вся фишка вопроса в том, что б не загружаю картинку узнать размер и это просто:
| Код | function GetBMPDimensions(fn: String): TPoint; var fs: TFileStream; begin fs := TFileStream.Create(fn, fmOpenRead); fs.Position := $12; fs.Read(Result, SizeOf(Result)); fs.Free; end;
function GetGIFDimensions(fn: String): TPoint; var fs: TFileStream; pt: TSmallPoint; begin fs := TFileStream.Create(fn, fmOpenRead); fs.Position := $6; fs.Read(pt, SizeOf(pt)); fs.Free; Result.X := pt.x; Result.Y := pt.y; end;
function GetJPEGDimensions(fn: String): TPoint; var fs: TFileStream; pt: TSmallPoint;
function NextMarker: Byte; var b: Byte; begin Result := 0; while True do begin repeat fs.Read(b, SizeOf(b)); until b = $FF;
repeat fs.Read(b, SizeOf(b)); until b <> $FF;
if b <> 0 then begin Result := b; Break; end; end; end;
begin fs := TFileStream.Create(fn, fmOpenRead); while not (NextMarker in [$C0..$CF]) do; fs.Seek(3, soFromCurrent); fs.Read(pt, SizeOf(pt)); fs.Free;
pt.x := ((pt.x and $00FF) shl 8) or ((pt.x and $FF00) shr 8); pt.y := ((pt.y and $00FF) shl 8) or ((pt.y and $FF00) shr 8);
Result.X := pt.y; Result.Y := pt.x; end;
procedure TForm1.Button1Click(Sender: TObject); var pt: TPoint; begin pt := GetBMPDimensions('c:\test.bmp'); ShowMessage('BMP: ' + IntToStr(pt.X) + ', ' + IntToStr(pt.Y));
pt := GetGIFDimensions('c:\test.gif'); ShowMessage('GIF: ' + IntToStr(pt.X) + ', ' + IntToStr(pt.Y));
pt := GetJPEGDimensions('c:\test.jpg'); ShowMessage('JPEG: ' + IntToStr(pt.X) + ', ' + IntToStr(pt.Y)); end;
|
не лучшая реализация с точки зрения понятности, надо бы все константы обозвать, структуры оформить и т.д. , но работает |