![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Определить DPI у JPEG-а [D5, D6, D7]
DelphiFan © (2006-02-06 13:41:00)Странная вещь получается.
Определяю DPI у JPEG-а по известной процедуре, она говорит, что DPI = 120.
Если посмотреть на свойства картинки через Проводник, то говорится, что DPI = 96 (у меня есть мысль, что это DPI монитора).
Есть ли 100-процентный способ узнать DPI у картинки?
Дмитрий Белькевич (2006-02-11 16:02:00) [1]
> Файл изображения не может быть привязан заранее к физ.параметрам
> устройства отображения (монитор, принтер и тп).
Случаи всякие бывают.
> Есть ли 100-процентный способ узнать DPI у картинки?
Смотри формат jpeg. Если в файле есть привязка к физическим точкам, думаю, это будет описано.
Jeer (2006-02-09 15:57:00) [2]Файл изображения не может быть привязан заранее к физ.параметрам устройства отображения (монитор, принтер и тп).
Отсюда и исходи.
DelphiFan (2006-02-09 14:20:00) [3]Здесь есть шанс получить ответ?
DelphiFan (2006-02-06 14:11:00) [4]Пользуюсь такими процедурами:
procedure GetResJpg(JPGFile: string);
const
BufferSize = 50;
var
Buffer: string;
Index: integer;
FileStream: TFileStream;
DP: Byte;
begin
FileStream := TFileStream.Create(JPGFile, fmOpenReadWrite);
try
SetLength(Buffer, BufferSize);
FileStream.Read(Buffer[1], BufferSize);
Index := Pos('JFIF' + #$00, Buffer);
if Index > 0 then begin
FileStream.Seek(Index + 6, soFromBeginning);
FileStream.Read(DP, 1);
case DP of
1: Measure := 'DPI'; //Dots Per Inch
2: Measure := 'DPC'; //Dots Per Cm.
end;
FileStream.Read(HorzRes, 2); // x axis
HorzRes := Swap(HorzRes);
FileStream.Read(VertRes, 2); // y axis
VertRes := Swap(VertRes);
end;
finally
FileStream.Free;
end;
end;
procedure SetResJpg(name: string; dpix, dpiy: Integer);
const
BufferSize = 50;
DPI = 1; //inch
DPC = 2; //cm
var
Buffer: string;
index: INTEGER;
FileStream: TFileStream;
xResolution: WORD;
yResolution: WORD;
_type: Byte;
begin
FileStream := TFileStream.Create(name, fmOpenReadWrite);
try
SetLength(Buffer, BufferSize);
FileStream.Read(buffer[1], BufferSize);
index := POS('JFIF' + #$00, buffer);
if index > 0 then begin
FileStream.Seek(index + 6, soFromBeginning);
_type := DPI;
FileStream.write(_type, 1);
xresolution := swap(dpix);
FileStream.write(xresolution, 2);
yresolution := swap(dpiy);
FileStream.write(yresolution, 2);
end;
finally
FileStream.Free;
end;
end;