Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > 300Х300 как узнать разрешение картинки


Автор: dr.ZmeY 22.7.2003, 11:55
Собственно САБЖ...
Т.е. открываю графический файл, пусть jpeg, размер в пикселях узнать не проблема, но нужно его разрешение в dpi... Уже всё перерыл, может кто знает?
ХЭЛП.... !!!!!

Автор: кварк_гость 22.7.2003, 13:31
Скажу тебе страшную тайну: dpi - какое хочешь!

dpi - dots per inch - количество точек на дюйм. Для графического файла этот параметр лишен всякого смысла. При печати (выводе на экран и т.д.) - совсем другое дело. Меряем линейные размеры картинки (в дюймах), делим на размер в пикселях - получаем dpi. Только так.

Или я не на тот вопрос ответил?

Автор: PostEr 22.7.2003, 14:47
Просто каждый файл графический файл имеет ещё разрешение. Для экрана рекомендуют 72 ppi.

То есть это значит, если хочешь выводить на экран, то нужно использовать 72ppi - значит что в квадратике 2,54х2,54см содержится 72х72 пикселей. То есть изменение разрешения - это масштабирование грубо говоря smile.gif А кварк_гость прав.

Автор: dr.ZmeY 23.7.2003, 11:26
Мне не для печати или вывода на экран...
Мне нужно узнать реальный размер картинки в мм, а для этого я должен знать с каким разрешением она отсканирована...
То что вы мне сказали я и так знаю.

Автор: Dexter 23.7.2003, 15:35
Загрузи в фотошопе на на линейках поменяй единицы измеения на см это и будет размер smile.gif

Автор: PostEr 24.7.2003, 09:53
А как этот размер считаетсяconfused.gif Точнее, при сканировании размер фиксирован - A4, а отношение Size in pixels \ Size in mm разное, и зависит оно от разрешения. Расчитать очень просто

Автор: dr.ZmeY 10.9.2003, 16:16
Цитата
Загрузи в фотошопе на на линейках поменяй единицы измеения на см это и будет размер 

Умный, да?
Я говорю про программный метод...
Цитата
Size in pixels \ Size in mm разное, и зависит оно от разрешения. Расчитать очень просто

Ну так мне именно это разрешение и неизвестно...

Автор: stab 11.9.2003, 01:31
Код

function GetJPEGDensity(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
 ZeroMemory(@pt, SizeOf(pt));
 fs := TFileStream.Create(fn, fmOpenRead);
 repeat
   m := NextMarker;
   if fs.Position > 1024 * 10 then m := $D9; // speed optimization
 until (m = $E0) or (m = $D9);
 
 if m <> $D9 then
 begin
   fs.Seek(10, soFromCurrent);
   fs.Read(pt, SizeOf(pt));

   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);
 end;
 fs.Free;

 Result.X := pt.y;
 Result.Y := pt.x;
end;

// ............
 pt := GetJPEGDensity('c:\test.jpg');
 ShowMessage('JPEG: ' + IntToStr(pt.X) + ', ' + IntToStr(pt.Y));
// ...............


Возвращает нули если плотность не определена. Кол-во точек на дюйм по горизонтали и вертикали может быть различным, поэтому возвращается два значения, обычно они равны.

з.ы. не верьте виндам, точнее свойствам файла в проводнике -- там показывается dpi экрана в том случае если вынды не смогли определить dpi файла.

з.з.ы. заметил что при значениях dpi 1, 72, 96, 100 разные проги разные значения показывают. Photoshop склоняется к 72, винды к 96 smile.gif

Автор: dr.ZmeY 11.9.2003, 02:25
Во, это уже ответ... спасибо...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)