Inno Setup WizardImageFile
(和WizardSmallImageFile
)的位图看起来很糟糕,因为当Windows 7启用了大型系统字体时,向导比平常大,但图像缩放得很糟糕。
有修复吗?
如果我在这样的地方添加自己的图片,则没有类似的问题:
BitmapImage1.AutoSize := True;
BitmapImage1.Align := alClient;
BitmapImage1.Left := 0;
BitmapImage1.Top := 0;
BitmapImage1.stretch := True;
BitmapImage1.Parent := Splash;
答案 0 :(得分:3)
这些是位图图像,它们自然会严重缩放。你很幸运,你自己的图像在缩放时看起来并不那么糟糕。
您必须为常见的缩放因子准备自己的一组图像。
现在使用的常见缩放因子是100%,125%,150%和200%。因此,您应该为图像设置四种尺寸,例如:
WizardImage 100.bmp
WizardImage 125.bmp
WizardImage 150.bmp
WizardImage 200.bmp
WizardSmallImage 100.bmp
WizardSmallImage 125.bmp
WizardSmallImage 150.bmp
WizardSmallImage 200.bmp
Inno Setup可以自动选择5.6以来的最佳图像版本。
只需在WizardImageFile
和WizardSmallImageFile
中列出您的图片版本即可。您可以使用通配符:
[Setup]
WizardImageFile=WizardImage *.bmp
WizardImageFile=WizardSmallImage *.bmp
在较旧版本的Inno Setup上(或者如果您需要自定义选择算法或在向导中有其他自定义图像时),则必须以编程方式选择图像。
以下示例或多或少与Inno Setup 5.6相同:
[Setup]
; Use 100% images by default
WizardImageFile=WizardImage 100.bmp
WizardSmallImageFile=WizardSmallImage 100.bmp
[Files]
; Embed all other sizes to the installer
Source: "WizardImage *.bmp"; Excludes: "* 100.bmp"; Flags: dontcopy
Source: "WizardSmallImage *.bmp"; Excludes: "* 100.bmp"; Flags: dontcopy
[Code]
function GetScalingFactor: Integer;
begin
if WizardForm.Font.PixelsPerInch >= 192 then Result := 200
else
if WizardForm.Font.PixelsPerInch >= 144 then Result := 150
else
if WizardForm.Font.PixelsPerInch >= 120 then Result := 125
else Result := 100;
end;
procedure LoadEmbededScaledBitmap(Image: TBitmapImage; NameBase: string);
var
Name: String;
FileName: String;
begin
Name := Format('%s %d.bmp', [NameBase, GetScalingFactor]);
ExtractTemporaryFile(Name);
FileName := ExpandConstant('{tmp}\' + Name);
Image.Bitmap.LoadFromFile(FileName);
DeleteFile(FileName);
end;
procedure InitializeWizard;
begin
{ If using larger scaling, load the correct size of images }
if GetScalingFactor > 100 then
begin
LoadEmbededScaledBitmap(WizardForm.WizardBitmapImage, 'WizardImage');
LoadEmbededScaledBitmap(WizardForm.WizardBitmapImage2, 'WizardImage');
LoadEmbededScaledBitmap(WizardForm.WizardSmallBitmapImage, 'WizardSmallImage');
end;
end;
您可能希望对SelectDirBitmapImage
,SelectGroupBitmapImage
和PreparingErrorBitmapImage
执行相同操作。
另见: