Вопрос Как получить размер изображения (длина, ширина в пикселях) средствами Инно?

Статус
В этой теме нельзя размещать новые ответы.

nik1967

Old Men
Проверенный
Нужно получить размер изображения (файла) рядом с сетапником в пикселях - длина, ширина.
 

nik1967

Old Men
Проверенный
В принципе - да, но можно конкретно .bmp и .png, если это критично.
 

Edison007

Ветеран
Модератор
Как вариант. С помощью ботвы загрузить изображение на форму с Stretch:=False (Width:=0; Height:=0), использовать функцию ImgGetPosition для получения координат и размера (записывая в переменные), удалить изображение. :)
 

Snoopak96

Старожил
nik1967,
Дальше сам
Код:
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[code]
function GetFileProperties(FilePath:String):String;
var
Properties,ADir,AFile:Variant;
begin
Properties := CreateOleObject('shell.application');
ADir:= Properties.NameSpace(ExtractFilePath(FilePath)) ;
AFile := ADir.Parsename (ExtractFileName(FilePath));
Result:= ADir.GetDetailsOf(AFile,31);
end;

procedure InitializeWizard;
begin
  MsgBox(GetFileProperties('X:\2015-05-31_160201.png'), mbInformation, MB_OK);
end;
 

nik1967

Old Men
Проверенный
Snoopak96, спасибо! Но. Как из выше приведённого кода получить именно Width:= и Height:= для дальнейшего использования?
- Что-то не выходит каменный цветок...
- Нефиг было его туда запихивать...
 

Snoopak96

Старожил
nik1967, это свойства файла, формат возвращаемых значений примерно такой: ?400х500? - думаю сам то сможешь от сюда выделить Width и Height. Мне лень дальше допиливать, тк не интересно. Форматы изображений - все которые знает винда по умолчанию.
 

nik1967

Old Men
Проверенный
Допилил пример Snoopak96'а - за что ему ещё раз большое спасибо! Если кому надо:
Код:
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
OutputDir=.

[code]
var
   Sw,Sh: String;

function GetFileProperties(FilePath: String): String;
var
   Properties,ADir,AFile: Variant;
begin
   Properties:= CreateOleObject('shell.application');
   ADir:= Properties.NameSpace(ExtractFilePath(FilePath)) ;
   AFile:= ADir.Parsename (ExtractFileName(FilePath));
   Sw:= ADir.GetDetailsOf(AFile,31);
   Sh:= Sw;
   Delete(Sw,Pos(' ',Sw),Length(Sw));
   Delete(Sh,1,Pos(' ',Sh)+2);
end;

function InitializeSetup: Boolean;
begin
  GetFileProperties(ExpandConstant('{src}\11.png'));
  MsgBox('Width  = '+Sw+' pix.'+#13#10+'Height = '+Sh+' pix.', mbInformation, MB_OK);
  Result:= false;
end;
Для дальнейшей передачи длины и ширины картинки в код ещё немного допилил:
Код:
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
OutputDir=.

[code]
var
   Wp,Hp: Longint;

function GetFileProperties(FilePath: String): String;
var
   Properties,ADir,AFile: Variant;
   Sw,Sh: String;
begin
   Properties:= CreateOleObject('shell.application');
   ADir:= Properties.NameSpace(ExtractFilePath(FilePath)) ;
   AFile:= ADir.Parsename (ExtractFileName(FilePath));
   Sw:= ADir.GetDetailsOf(AFile,31);
   Sh:= Sw;
   Delete(Sw,Pos(' ',Sw),Length(Sw));
   Delete(Sw,1,1);
   Delete(Sh,1,Pos(' ',Sh)+2);
   Delete(Sh,Length(Sh),1);
   Wp:= StrToInt(Sw); //длина картинки в пикселях
   Hp:= StrToInt(Sh); //ширина картинки в пикселях
end;

function InitializeSetup: Boolean;
begin
   GetFileProperties(ExpandConstant('{src}\14.png'));
   MsgBox('Width  = '+IntToStr(Wp)+' pix.'+#13#10+'Height = '+IntToStr(Hp)+' pix.', mbInformation, MB_OK);
   //SaveStringToFile(ExpandConstant('{src}\14.txt'), 'Width  = '+IntToStr(Wp)+' pix.'+#13#10+'Height = '+IntToStr(Hp)+' pix.', false); //для проверки - запись в файл
   Result:= false;
end;
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху