Форум: "Media";
Текущий архив: 2008.11.30;
Скачать: [xml.tar.bz2];
ВнизРазмер (высота и ширина) Jpeg и bmp Найти похожие ветки
← →
Jimmy (2007-08-27 01:04) [0]Подскажите, полажуйста, как не открывая jpg и bmp файла определить высоту и ширину картинки в пикселях? Заранее спасибо.
← →
{RASkov} © (2007-08-27 02:13) [1]> [0] Jimmy (27.08.07 01:04)
> как не открывая jpg и bmp файла определить высоту и ширину
> картинки в пикселях
В любом случае - никак :)
А вот открыть и не загружая весь файл, а считать размер из заголовка файла, возможно и можно, но я не знаю....
Смотри форматы данных файлов.... может и найдешь ответ сам....
← →
s7r © (2007-08-27 08:58) [2]Есть статья:
http://articles.org.ru/cfaq/index.php?qid=2711&catid=32
← →
исследователь © (2007-08-27 08:59) [3]Только чтением информации из сигнатур, насколько я знаю, для каждого формата сигнатуры свои). s7r подсказывает абсолютно правильно.
← →
Sapersky (2007-08-27 14:07) [4]s7r © (27.08.07 08:58) [2]
Есть статья:
Ну зачем так далеко ходить:
http://www.delphimaster.ru/cgi-bin/faq.pl?look=1&id=988625329&n=21
← →
@!!ex © (2007-08-27 15:30) [5]Тут уже ответили, но всеже.
Достаточно читать заголовок файла.
Это не сложно, только он у каждого формата свой.
Например в классическом BMP Ширина и Высота - 4 байтовые целочисленное беззнаковое и находиться соответственно на смещении 18 и 22
← →
grisme © (2007-08-27 17:32) [6]мда, вопрос читается, как арахисовый ^^"
← →
Jimmy (2007-08-27 17:35) [7]function ReadMWord(f: TFileStream): word;
type TMotorolaWord = record
case byte of
0: (Value: word);
1: (Byte1, Byte2: byte);
end;
var
MW: TMotorolaWord;
begin
{ It would probably be better to just read these two bytes in normally }
{ and then do a small ASM routine to swap them. But we aren"t talking }
{ about reading entire files, so I doubt the performance gain would be }
{ worth the trouble.}
f.read(MW.Byte2, SizeOf(Byte));
f.read(MW.Byte1, SizeOf(Byte));
Result := MW.Value;
end;
{------------------------------------------------------------------------------}
procedure GetJPGSize(const sFile: string; var wWidth, wHeight: word);
const
ValidSig : array[0..1] of byte = ($FF, $D8);
Parameterless = [$01, $D0, $D1, $D2, $D3, $D4, $D5, $D6, $D7];
var
Sig: array[0..1] of byte;
f: TFileStream;
x: integer;
Seg: byte;
Dummy: array[0..15] of byte;
Len: word;
ReadLen: LongInt;
begin
FillChar(Sig, SizeOf(Sig), #0);
f := TFileStream.Create(sFile, fmOpenRead);
try
ReadLen := f.read(Sig[0], SizeOf(Sig));
for x := Low(Sig) to High(Sig) do
if Sig[x] <> ValidSig[x] then
ReadLen := 0;
if ReadLen > 0 then
begin
ReadLen := f.read(Seg, 1);
while (Seg = $FF) and (ReadLen > 0) do
begin
ReadLen := f.read(Seg, 1);
if Seg <> $FF then
begin
if (Seg = $C0) or (Seg = $C1) then
begin
ReadLen := f.read(Dummy[0], 3);
{ don"t need these bytes }
wHeight := ReadMWord(f);
wWidth := ReadMWord(f);
end
else
begin
if not (Seg in Parameterless) then
begin
Len := ReadMWord(f);
f.Seek(Len-2, 1);
f.read(Seg, 1);
end
else
Seg := $FF;
{ Fake it to keep looping. }
end;
end;
end;
end;
finally
f.Free;
end;
end;
Это процедура для определения размера (высота, ширина) JPG файла. Что здесь надо изменить, учитывая, что для bmp смещение 18 и 22, чтобы она работала для bmp?
← →
clickmaker © (2007-08-27 17:41) [8]
> f := TFileStream.Create(sFile, fmOpenRead);
это называется "не открывая jpg и bmp файла"?
← →
{RASkov} © (2007-08-27 18:22) [9]> [7] Jimmy (27.08.07 17:35)
> Это процедура для определения размера (высота, ширина) JPG
> файла. Что здесь надо изменить, учитывая, что для bmp смещение
> 18 и 22, чтобы она работала для bmp?
http://www.ishodniki.ru/base/Pascal/bmpformat.zip
Страницы: 1 вся ветка
Форум: "Media";
Текущий архив: 2008.11.30;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.005 c