mirror of
https://github.com/doublecmd/doublecmd.git
synced 2026-06-21 09:58:13 +00:00
FIX: Viewer - save image as (save jpeg as new jpeg, save image with upper case extension)
This commit is contained in:
parent
b03d176fa3
commit
22f40b4864
4 changed files with 108 additions and 255 deletions
142
src/fmodview.lfm
142
src/fmodview.lfm
|
|
@ -15,7 +15,7 @@ object frmModView: TfrmModView
|
|||
OnKeyPress = FormKeyPress
|
||||
OnShow = FormShow
|
||||
Position = poOwnerFormCenter
|
||||
LCLVersion = '1.6.0.3'
|
||||
LCLVersion = '2.2.6.0'
|
||||
object bplButtons: TButtonPanel
|
||||
Left = 10
|
||||
Height = 34
|
||||
|
|
@ -59,14 +59,17 @@ object frmModView: TfrmModView
|
|||
ClientWidth = 468
|
||||
TabOrder = 2
|
||||
object tbQuality: TTrackBar
|
||||
AnchorSideTop.Control = lblQuality
|
||||
AnchorSideTop.Side = asrBottom
|
||||
Left = 0
|
||||
Height = 22
|
||||
Top = 71
|
||||
Width = 140
|
||||
Max = 100
|
||||
Min = 1
|
||||
OnChange = tbQualityChange
|
||||
Position = 80
|
||||
OnMouseMove = tbQualityMouseMove
|
||||
BorderSpacing.Top = 12
|
||||
TabOrder = 0
|
||||
end
|
||||
object lblQuality: TLabel
|
||||
|
|
@ -78,62 +81,18 @@ object frmModView: TfrmModView
|
|||
Enabled = False
|
||||
ParentColor = False
|
||||
end
|
||||
object teQuality: TEdit
|
||||
object teQuality: TSpinEdit
|
||||
AnchorSideTop.Control = tbQuality
|
||||
AnchorSideTop.Side = asrCenter
|
||||
Left = 144
|
||||
Height = 23
|
||||
Top = 71
|
||||
Width = 43
|
||||
OnKeyPress = teQualityKeyPress
|
||||
OnKeyUp = teQualityKeyUp
|
||||
Height = 36
|
||||
Top = 38
|
||||
Width = 75
|
||||
MaxValue = 100
|
||||
MinValue = 1
|
||||
OnChange = teQualityChange
|
||||
TabOrder = 1
|
||||
Text = '80'
|
||||
end
|
||||
object rbJpg: TRadioButton
|
||||
Left = 8
|
||||
Height = 19
|
||||
Top = 0
|
||||
Width = 39
|
||||
Caption = 'JPG'
|
||||
Checked = True
|
||||
OnChange = rbJpgChange
|
||||
TabOrder = 2
|
||||
TabStop = True
|
||||
end
|
||||
object rbBmp: TRadioButton
|
||||
Left = 59
|
||||
Height = 19
|
||||
Top = 0
|
||||
Width = 45
|
||||
Caption = 'BMP'
|
||||
OnChange = rbBmpChange
|
||||
TabOrder = 3
|
||||
end
|
||||
object rbPng: TRadioButton
|
||||
Left = 112
|
||||
Height = 19
|
||||
Top = 0
|
||||
Width = 44
|
||||
Caption = 'PNG'
|
||||
OnChange = rbPngChange
|
||||
TabOrder = 4
|
||||
end
|
||||
object rbIco: TRadioButton
|
||||
Left = 29
|
||||
Height = 19
|
||||
Top = 22
|
||||
Width = 40
|
||||
Caption = 'ICO'
|
||||
OnChange = rbIcoChange
|
||||
TabOrder = 5
|
||||
end
|
||||
object rbPnm: TRadioButton
|
||||
Left = 88
|
||||
Height = 19
|
||||
Top = 21
|
||||
Width = 47
|
||||
Caption = 'PNM'
|
||||
OnChange = rbPnmChange
|
||||
TabOrder = 6
|
||||
Value = 1
|
||||
end
|
||||
end
|
||||
object pnlCopyMoveFile: TPanel
|
||||
|
|
@ -514,70 +473,23 @@ object frmModView: TfrmModView
|
|||
end
|
||||
end
|
||||
object sddCopyMoveFile: TSelectDirectoryDialog
|
||||
left = 288
|
||||
top = 40
|
||||
Left = 288
|
||||
Top = 40
|
||||
end
|
||||
object ImageList: TImageList
|
||||
Height = 24
|
||||
Width = 9
|
||||
left = 288
|
||||
top = 112
|
||||
Left = 288
|
||||
Top = 112
|
||||
Bitmap = {
|
||||
4C69020000000900000018000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000535755565357
|
||||
55FF535755FF535755FF535755FF535755FF5357555600000000000000005357
|
||||
55FF8E8D8DFFE9E8E8FFE9E8E8FFE9E8E8FF908E8EFF535755FF000000000000
|
||||
0000535755FFE9E8E8FF535755FF535755FF535755FFE9E8E8FF535755FF0000
|
||||
000000000000535755FFE9E8E8FF535755FF53575500535755FFE9E8E8FF5357
|
||||
55FF0000000000000000535755FFE9E8E8FF535755FF00000000535755FFE9E8
|
||||
E8FF535755FF0000000000000000535755FFE9E8E8FF535755FF000000005357
|
||||
55FFE9E8E8FF535755FF0000000000000000535755FFE9E8E8FF535755FF858A
|
||||
88FF535755FFE9E8E8FF535755FF0000000000000000535755FF918F8FFF3634
|
||||
2EFFECEEEEFF858A88FF918F8FFF535755FF0000000000000000535755445357
|
||||
55FF36342EFFECEEEEFF858A88FF535755FF5357555600000000000000000000
|
||||
00000000000036342EFFECEEEEFF858A88FF0000000000000000000000000000
|
||||
0000000000000000000036342EFFECEEEEFF858A88FF00000000000000000000
|
||||
00000000000053575544535755FF36342EFFECEEEEFF858A88FF535755FF5357
|
||||
55440000000000000000535755FF999898FF36342EFFECEEEEFF858A88FF9795
|
||||
95FF535755FF0000000000000000535755FFE9E8E8FF535755FF36342EFF5357
|
||||
55FFE9E8E8FF535755FF0000000000000000535755FFE9E8E8FF535755FF0000
|
||||
0000535755FFE9E8E8FF535755FF0000000000000000535755FFE9E8E8FF5357
|
||||
55FF00000000535755FFE9E8E8FF535755FF0000000000000000535755FFE9E8
|
||||
E8FF535755FF00000000535755FFE9E8E8FF535755FF00000000000000005357
|
||||
55FFE9E8E8FF535755FF535755FF535755FFE9E8E8FF535755FF000000000000
|
||||
0000535755FF9E9D9DFFE9E8E8FFE9E8E8FFE9E8E8FFBAB9B9FF535755FF0000
|
||||
00005357550053575556535755FF535755FF535755FF535755FF535755FF5357
|
||||
5556000000000000000000000000000000000000000000000000000000000000
|
||||
0000535755000000000000000000000000000000000000000000000000000000
|
||||
00000000000000000000000000000000000053575556535755FF535755FF5357
|
||||
55FF535755FF535755FF535755560000000000000000535755FF8E8D8DFFE9E8
|
||||
E8FFE9E8E8FFE9E8E8FF908E8EFF535755FF0000000000000000535755FFE9E8
|
||||
E8FF535755FF535755FF535755FFE9E8E8FF535755FF00000000000000005357
|
||||
55FFE9E8E8FF535755FFE9E8E800535755FFE9E8E8FF535755FF000000000000
|
||||
0000535755FFE9E8E8FF535755FF53575500535755FFE9E8E8FF535755FF0000
|
||||
000000000000535755FFE9E8E8FF535755FF53575500535755FFE9E8E8FF5357
|
||||
55FF0000000000000000535755FFE9E8E8FF535755FF858A88FF535755FFE9E8
|
||||
E8FF535755FF0000000000000000535755FF918F8FFF36342EFFECEEEEFF858A
|
||||
88FF918F8FFF535755FF000000000000000053575544535755FF36342EFFECEE
|
||||
EEFF858A88FF535755FF53575556000000000000000053575500918F8F003634
|
||||
2EFFECEEEEFF858A88FF918F8F00535755000000000000000000535755005357
|
||||
550036342E00ECEEEE00858A8800535755005357550000000000000000000000
|
||||
00000000000036342E00ECEEEE00858A88000000000000000000000000000000
|
||||
0000000000000000000036342E00ECEEEE00858A880000000000000000000000
|
||||
000000000000535755005357550036342E00ECEEEE00858A8800535755005357
|
||||
55000000000000000000535755009998980036342EFFECEEEEFF858A88FF9795
|
||||
950053575500000000000000000053575544535755FF36342EFFECEEEEFF858A
|
||||
88FF535755FF535755440000000000000000535755FF999898FF36342EFFECEE
|
||||
EEFF858A88FF979595FF535755FF0000000000000000535755FFE9E8E8FF5357
|
||||
55FF36342EFF535755FFE9E8E8FF535755FF0000000000000000535755FFE9E8
|
||||
E8FF535755FF00000000535755FFE9E8E8FF535755FF00000000000000005357
|
||||
55FFE9E8E8FF535755FF53575500535755FFE9E8E8FF535755FF000000000000
|
||||
0000535755FFE9E8E8FF535755FFE9E8E800535755FFE9E8E8FF535755FF0000
|
||||
000053575500535755FFE9E8E8FF535755FF535755FF535755FFE9E8E8FF5357
|
||||
55FF0000000000000000535755FF9E9D9DFFE9E8E8FFE9E8E8FFE9E8E8FFBAB9
|
||||
B9FF535755FF000000000000000053575556535755FF535755FF535755FF5357
|
||||
55FF535755FF5357555600000000
|
||||
4C7A020000000900000018000000D70000000000000078DA6360A01E080E0F0D
|
||||
03E2FF587018929AFF7DBDBDFF5FBE7801C713FAFAC0EA90D580C491CD80F171
|
||||
A86120A4061B9F1C35AD5D1D38DD33B1BFFFBF9989DEFF37EFDE81D581F8686A
|
||||
5C407C6435E8E10303C86A7085373E3578EC724176F3CC193350D44C9F3A15A7
|
||||
DF41EAE815CEC4A8C19736E6CD9D8B92C676EDDC896C2E5169154F3A1F12F902
|
||||
48335023EF10A386D6F902E406A03E06347350E202EA4E901A06A01A06A01AB8
|
||||
1896BC035783277FE154438C5D2036307F31A0E52F743583369F1213EFD8D218
|
||||
BA3E72F3293179070068D29CC0
|
||||
}
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -1,12 +1,5 @@
|
|||
{"version":1,"strings":[
|
||||
{"hash":211134021,"name":"tfrmmodview.caption","sourcebytes":[78,101,119,32,83,105,122,101],"value":"New Size"},
|
||||
{"hash":219345735,"name":"tfrmmodview.lblquality.caption","sourcebytes":[81,117,97,108,105,116,121,32,111,102,32,99,111,109,112,114,101,115,115,32,116,111,32,74,112,103],"value":"Quality of compress to Jpg"},
|
||||
{"hash":944,"name":"tfrmmodview.tequality.text","sourcebytes":[56,48],"value":"80"},
|
||||
{"hash":20295,"name":"tfrmmodview.rbjpg.caption","sourcebytes":[74,80,71],"value":"JPG"},
|
||||
{"hash":18208,"name":"tfrmmodview.rbbmp.caption","sourcebytes":[66,77,80],"value":"BMP"},
|
||||
{"hash":21799,"name":"tfrmmodview.rbpng.caption","sourcebytes":[80,78,71],"value":"PNG"},
|
||||
{"hash":19839,"name":"tfrmmodview.rbico.caption","sourcebytes":[73,67,79],"value":"ICO"},
|
||||
{"hash":21805,"name":"tfrmmodview.rbpnm.caption","sourcebytes":[80,78,77],"value":"PNM"},
|
||||
{"hash":12558,"name":"tfrmmodview.btnpath1.caption","sourcebytes":[46,46,46],"value":"..."},
|
||||
{"hash":12558,"name":"tfrmmodview.btnpath2.caption","sourcebytes":[46,46,46],"value":"..."},
|
||||
{"hash":12558,"name":"tfrmmodview.btnpath3.caption","sourcebytes":[46,46,46],"value":"..."},
|
||||
|
|
@ -20,5 +13,6 @@
|
|||
{"hash":201192154,"name":"tfrmmodview.lblheight.caption","sourcebytes":[72,101,105,103,104,116,32,58],"value":"Height :"},
|
||||
{"hash":234596970,"name":"tfrmmodview.lblwidth.caption","sourcebytes":[87,105,100,116,104,32,58],"value":"Width :"},
|
||||
{"hash":6159272,"name":"tfrmmodview.tewidth.text","sourcebytes":[87,105,100,116,104],"value":"Width"},
|
||||
{"hash":82574836,"name":"tfrmmodview.teheight.text","sourcebytes":[72,101,105,103,104,116],"value":"Height"}
|
||||
{"hash":82574836,"name":"tfrmmodview.teheight.text","sourcebytes":[72,101,105,103,104,116],"value":"Height"},
|
||||
{"hash":219345735,"name":"tfrmmodview.lblquality.caption","sourcebytes":[81,117,97,108,105,116,121,32,111,102,32,99,111,109,112,114,101,115,115,32,116,111,32,74,112,103],"value":"Quality of compress to Jpg"}
|
||||
]}
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ interface
|
|||
|
||||
uses
|
||||
SysUtils, Classes, Controls, Forms,
|
||||
Dialogs, StdCtrls, Buttons, ExtCtrls, ComCtrls, ButtonPanel, uOSForms;
|
||||
Dialogs, StdCtrls, Buttons, ExtCtrls, ComCtrls, ButtonPanel, Spin, uOSForms;
|
||||
|
||||
type
|
||||
|
||||
|
|
@ -33,16 +33,11 @@ type
|
|||
pnlCopyMoveFile: TPanel;
|
||||
pnlQuality: TPanel;
|
||||
pnlSize: TPanel;
|
||||
rbBmp: TRadioButton;
|
||||
rbIco: TRadioButton;
|
||||
rbJpg: TRadioButton;
|
||||
rbPath1: TRadioButton;
|
||||
rbPath2: TRadioButton;
|
||||
rbPath3: TRadioButton;
|
||||
rbPath4: TRadioButton;
|
||||
rbPath5: TRadioButton;
|
||||
rbPng: TRadioButton;
|
||||
rbPnm: TRadioButton;
|
||||
sddCopyMoveFile: TSelectDirectoryDialog;
|
||||
tbQuality: TTrackBar;
|
||||
teHeight: TEdit;
|
||||
|
|
@ -51,7 +46,7 @@ type
|
|||
tePath3: TEdit;
|
||||
tePath4: TEdit;
|
||||
tePath5: TEdit;
|
||||
teQuality: TEdit;
|
||||
teQuality: TSpinEdit;
|
||||
teWidth: TEdit;
|
||||
procedure btnCancelClick(Sender: TObject);
|
||||
procedure btnOkClick(Sender: TObject);
|
||||
|
|
@ -61,24 +56,17 @@ type
|
|||
procedure FormCreate(Sender: TObject);
|
||||
procedure FormKeyPress(Sender: TObject; var Key: char);
|
||||
procedure FormShow(Sender: TObject);
|
||||
procedure rbBmpChange(Sender: TObject);
|
||||
procedure rbIcoChange(Sender: TObject);
|
||||
procedure rbJpgChange(Sender: TObject);
|
||||
procedure rbPngChange(Sender: TObject);
|
||||
procedure rbPnmChange(Sender: TObject);
|
||||
procedure tbQualityMouseMove(Sender: TObject; Shift: TShiftState; X,
|
||||
Y: Integer);
|
||||
procedure tbQualityChange(Sender: TObject);
|
||||
procedure teHeightKeyPress(Sender: TObject; var Key: char);
|
||||
procedure teHeightKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
|
||||
procedure teQualityKeyPress(Sender: TObject; var Key: char);
|
||||
procedure teQualityKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
|
||||
procedure teQualityChange(Sender: TObject);
|
||||
procedure teWidthKeyPress(Sender: TObject; var Key: char);
|
||||
procedure teWidthKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
|
||||
private
|
||||
{ private declarations }
|
||||
prX, prY: integer;
|
||||
public
|
||||
Path, sExt : string;
|
||||
Path : string;
|
||||
{ public declarations }
|
||||
end;
|
||||
|
||||
|
|
@ -100,11 +88,11 @@ end;
|
|||
|
||||
procedure TfrmModView.FormClose(Sender: TObject; var CloseAction: TCloseAction);
|
||||
begin
|
||||
gCopyMovePath1 := tePath1.Text;
|
||||
gCopyMovePath2 := tePath2.Text;
|
||||
gCopyMovePath3 := tePath3.Text;
|
||||
gCopyMovePath4 := tePath4.Text;
|
||||
gCopyMovePath5 := tePath5.Text;
|
||||
gCopyMovePath1 := tePath1.Text;
|
||||
gCopyMovePath2 := tePath2.Text;
|
||||
gCopyMovePath3 := tePath3.Text;
|
||||
gCopyMovePath4 := tePath4.Text;
|
||||
gCopyMovePath5 := tePath5.Text;
|
||||
end;
|
||||
|
||||
procedure TfrmModView.FormCreate(Sender: TObject);
|
||||
|
|
@ -174,58 +162,16 @@ begin
|
|||
end;
|
||||
if pnlQuality.Visible then
|
||||
begin
|
||||
sExt:= '.jpg';
|
||||
tbQuality.Enabled:=true;
|
||||
lblQuality.Enabled:=True;
|
||||
tbQuality.Position:=gViewerJpegQuality;
|
||||
teQuality.Text:=IntToStr(gViewerJpegQuality);
|
||||
teQuality.Value:= gViewerJpegQuality;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TfrmModView.rbBmpChange(Sender: TObject);
|
||||
procedure TfrmModView.tbQualityChange(Sender: TObject);
|
||||
begin
|
||||
sExt:='.bmp';
|
||||
tbQuality.Enabled:=False;
|
||||
teQuality.Enabled:=False;
|
||||
lblQuality.Enabled:=False;
|
||||
end;
|
||||
|
||||
procedure TfrmModView.rbIcoChange(Sender: TObject);
|
||||
begin
|
||||
sExt:='.ico';
|
||||
tbQuality.Enabled:=False;
|
||||
teQuality.Enabled:=False;
|
||||
lblQuality.Enabled:=False;
|
||||
end;
|
||||
|
||||
procedure TfrmModView.rbJpgChange(Sender: TObject);
|
||||
begin
|
||||
sExt:='.jpg';
|
||||
tbQuality.Enabled:=True;
|
||||
teQuality.Enabled:=True;
|
||||
lblQuality.Enabled:=True;
|
||||
end;
|
||||
|
||||
procedure TfrmModView.rbPngChange(Sender: TObject);
|
||||
begin
|
||||
sExt:='.png';
|
||||
tbQuality.Enabled:=False;
|
||||
teQuality.Enabled:=False;
|
||||
lblQuality.Enabled:=False;
|
||||
end;
|
||||
|
||||
procedure TfrmModView.rbPnmChange(Sender: TObject);
|
||||
begin
|
||||
sExt:='.pnm';
|
||||
tbQuality.Enabled:=False;
|
||||
teQuality.Enabled:=False;
|
||||
lblQuality.Enabled:=False;
|
||||
end;
|
||||
|
||||
procedure TfrmModView.tbQualityMouseMove(Sender: TObject; Shift: TShiftState;
|
||||
X, Y: Integer);
|
||||
begin
|
||||
teQuality.Text:= intToStr(tbQuality.Position);
|
||||
teQuality.Value:= tbQuality.Position;
|
||||
end;
|
||||
|
||||
procedure TfrmModView.btnOkClick(Sender: TObject);
|
||||
|
|
@ -292,16 +238,9 @@ begin
|
|||
end;
|
||||
end;
|
||||
|
||||
procedure TfrmModView.teQualityKeyPress(Sender: TObject; var Key: char);
|
||||
procedure TfrmModView.teQualityChange(Sender: TObject);
|
||||
begin
|
||||
if not (key in ['0'..'9', #8]) then key:=#0;
|
||||
end;
|
||||
|
||||
procedure TfrmModView.teQualityKeyUp(Sender: TObject; var Key: Word;
|
||||
Shift: TShiftState);
|
||||
begin
|
||||
if StrToInt(teQuality.Text)<=100 then
|
||||
tbQuality.Position:=StrToInt(teQuality.Text);
|
||||
tbQuality.Position:= teQuality.Value;
|
||||
end;
|
||||
|
||||
procedure TfrmModView.teWidthKeyPress(Sender: TObject; var Key: char);
|
||||
|
|
|
|||
122
src/fviewer.pas
122
src/fviewer.pas
|
|
@ -1710,61 +1710,74 @@ begin
|
|||
CreateTmp;
|
||||
end;
|
||||
|
||||
|
||||
procedure TfrmViewer.SaveImageAs(var sExt: String; senderSave: boolean; Quality: integer);
|
||||
var
|
||||
sFileName: string;
|
||||
ico : TIcon = nil;
|
||||
jpg : TJpegImage = nil;
|
||||
sFileName: String;
|
||||
fsFileStream: TFileStreamEx;
|
||||
pnm : TPortableAnyMapGraphic = nil;
|
||||
begin
|
||||
if senderSave then
|
||||
sFileName:= FileList.Strings[iActiveFile]
|
||||
else
|
||||
begin
|
||||
sExt:= LowerCase(sExt);
|
||||
sFileName:= FileList.Strings[iActiveFile];
|
||||
end
|
||||
else begin
|
||||
with SavePictureDialog do
|
||||
begin
|
||||
if not SavePictureDialog.Execute then Exit;
|
||||
sFileName:= ChangeFileExt(SavePictureDialog.FileName, sExt);
|
||||
if not Execute then Exit;
|
||||
sExt:= ExtensionSeparator + GetFilterExt;
|
||||
sFileName:= ChangeFileExt(FileName, sExt);
|
||||
end;
|
||||
|
||||
if (sExt = '.jpg') or (sExt = '.jpeg') then
|
||||
begin
|
||||
FModSizeDialog:= TfrmModView.Create(Self);
|
||||
try
|
||||
FModSizeDialog.pnlSize.Visible:= False;
|
||||
FModSizeDialog.pnlCopyMoveFile.Visible:= False;
|
||||
FModSizeDialog.pnlQuality.Visible:= True;
|
||||
FModSizeDialog.Caption:= SavePictureDialog.Title;
|
||||
if FModSizeDialog.ShowModal <> mrOk then Exit;
|
||||
Quality:= FModSizeDialog.teQuality.Value;
|
||||
finally
|
||||
FreeAndNil(FModSizeDialog);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
try
|
||||
fsFileStream:= TFileStreamEx.Create(sFileName, fmCreate);
|
||||
try
|
||||
if (sExt = '.jpg') or (sExt = '.jpeg') then
|
||||
begin
|
||||
jpg := TJpegImage.Create;
|
||||
try
|
||||
jpg.Assign(Image.Picture.Graphic);
|
||||
jpg.CompressionQuality := Quality;
|
||||
jpg.SaveToStream(fsFileStream);
|
||||
finally
|
||||
jpg.Free;
|
||||
begin
|
||||
with TJpegImage.Create do
|
||||
try
|
||||
// Special case
|
||||
if Image.Picture.Graphic is TJPEGImage then
|
||||
begin
|
||||
LoadFromRawImage(Image.Picture.Jpeg.RawImage, False);
|
||||
end
|
||||
else begin
|
||||
Assign(Image.Picture.Graphic);
|
||||
end;
|
||||
end
|
||||
else if sExt = '.ico' then
|
||||
begin
|
||||
ico := TIcon.Create;
|
||||
try
|
||||
ico.Assign(Image.Picture.Graphic);
|
||||
ico.SaveToStream(fsFileStream);
|
||||
finally
|
||||
ico.Free;
|
||||
end;
|
||||
end
|
||||
else if sExt = '.pnm' then
|
||||
begin
|
||||
pnm := TPortableAnyMapGraphic.Create;
|
||||
try
|
||||
pnm.Assign(Image.Picture.Graphic);
|
||||
pnm.SaveToStream(fsFileStream);
|
||||
finally
|
||||
pnm.Free;
|
||||
end;
|
||||
end
|
||||
else if (sExt = '.png') or (sExt = '.bmp') then
|
||||
begin
|
||||
Image.Picture.SaveToStreamWithFileExt(fsFileStream, sExt);
|
||||
CompressionQuality := Quality;
|
||||
SaveToStream(fsFileStream);
|
||||
finally
|
||||
Free;
|
||||
end;
|
||||
end
|
||||
else if sExt = '.ico' then
|
||||
begin
|
||||
with TIcon.Create do
|
||||
try
|
||||
Assign(Image.Picture.Graphic);
|
||||
SaveToStream(fsFileStream);
|
||||
finally
|
||||
Free;
|
||||
end;
|
||||
end
|
||||
else begin
|
||||
Image.Picture.SaveToStreamWithFileExt(fsFileStream, sExt);
|
||||
end;
|
||||
finally
|
||||
FreeAndNil(fsFileStream);
|
||||
end;
|
||||
|
|
@ -2124,6 +2137,13 @@ begin
|
|||
|
||||
HotMan.Register(pnlText ,'Text files');
|
||||
HotMan.Register(pnlImage,'Image files');
|
||||
|
||||
SavePictureDialog.Filter:= GraphicFilter(TPortableNetworkGraphic) + '|' +
|
||||
GraphicFilter(TBitmap) + '|' +
|
||||
GraphicFilter(TJPEGImage) + '|' +
|
||||
GraphicFilter(TIcon) + '|' +
|
||||
GraphicFilter(TPortableAnyMapGraphic);
|
||||
|
||||
end;
|
||||
|
||||
procedure TfrmViewer.FormKeyPress(Sender: TObject; var Key: Char);
|
||||
|
|
@ -3259,25 +3279,13 @@ begin
|
|||
end;
|
||||
|
||||
procedure TfrmViewer.cm_SaveAs(const Params: array of string);
|
||||
var
|
||||
sExt: String;
|
||||
begin
|
||||
if bAnimation or bImage then
|
||||
begin
|
||||
FModSizeDialog:= TfrmModView.Create(Self);
|
||||
try
|
||||
FModSizeDialog.pnlSize.Visible:=false;
|
||||
FModSizeDialog.pnlCopyMoveFile.Visible :=false;
|
||||
FModSizeDialog.pnlQuality.Visible:=true;
|
||||
FModSizeDialog.Caption:= rsViewImageType;
|
||||
if FModSizeDialog.ShowModal = mrOk then
|
||||
begin
|
||||
if StrToInt(FModSizeDialog.teQuality.Text)<=100 then
|
||||
SaveImageAs(FModSizeDialog.sExt,false,StrToInt(FModSizeDialog.teQuality.Text))
|
||||
else
|
||||
msgError(rsViewBadQuality);
|
||||
end
|
||||
finally
|
||||
FreeAndNil(FModSizeDialog);
|
||||
end;
|
||||
sExt:= EmptyStr;
|
||||
SaveImageAs(sExt, False, gViewerJpegQuality);
|
||||
end;
|
||||
end;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue