ViewVC Help
View File | Revision Log | View Changeset | Root Listing
root/Oni2/oup/current/Tools/TxmpReplace.pas
(Generate patch)

Comparing oup/current/Tools/TxmpReplace.pas (file contents):
Revision 193 by alloc, Sat May 26 14:24:55 2007 UTC vs.
Revision 224 by alloc, Mon Jun 18 14:49:24 2007 UTC

# Line 1 | Line 1
1   unit TxmpReplace;
2 +
3   interface
4 +
5   uses
6    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
7 <  Dialogs, Template, StdCtrls, ExtCtrls,
8 <  Functions, Data, OniImgClass, Menus, Buttons, TypeDefs;
7 >  Dialogs, _TemplateFileList, Menus, StdCtrls, Buttons, ComCtrls, ExtCtrls,
8 >  OniImgClass, TypeDefs;
9  
10   type
11 <  TForm_TxmpReplace = class(TForm_ToolTemplate)
11 >  TForm_TxmpReplace = class(TForm_TemplateFileList)
12      group_options: TGroupBox;
13      btn_replace: TButton;
14      check_transparency: TCheckBox;
15      check_fading: TCheckBox;
16 <    panel_txmppreview: TPanel;
17 <    btn_save: TButton;
16 <    image_txmppreview: TImage;
17 <    splitter_txmp: TSplitter;
16 >    GroupBox1: TGroupBox;
17 >    Splitter1: TSplitter;
18      group_bmpselect: TGroupBox;
19      image_bmppreview: TImage;
20      panel_load: TPanel;
21      btn_load: TButton;
22 <    opend: TOpenDialog;
22 >    image_txmppreview: TImage;
23 >    panel_txmppreview: TPanel;
24 >    btn_save: TButton;
25      saved: TSaveDialog;
26 +    opend: TOpenDialog;
27      procedure SelectFile(fileinfo: TFileInfo);
28      procedure FormCreate(Sender: TObject);
29      procedure FormClose(Sender: TObject; var Action: TCloseAction);
30      procedure btn_saveClick(Sender: TObject);
31      procedure btn_loadClick(Sender: TObject);
32      procedure btn_replaceClick(Sender: TObject);
33 +    procedure Splitter1Moved(Sender: TObject);
34    private
35      OniImage_Old: TOniImage;
36      OniImage_New: TOniImage;
# Line 35 | Line 39 | type
39    public
40    end;
41  
38 var
39  Form_TxmpReplace: TForm_TxmpReplace;
40
42   implementation
43   {$R *.dfm}
44 < uses Main, ConnectionManager, ImagingTypes;
45 <
45 <
44 > uses
45 >  _TemplateFile, ConnectionManager, ImagingTypes;
46  
47   procedure TForm_TxmpReplace.SelectFile(fileinfo: TFileInfo);
48   var
49  mem:  TMemoryStream;
49    fadingbyte, depthbyte, storebyte: Byte;
50   begin
51    fileid := fileinfo.ID;
# Line 56 | Line 55 | begin
55  
56    OniImage_Old.LoadFromTXMP(ConnectionID, fileid);
57    old_size := OniImage_Old.GetImageSize(True);
58 <  OniImage_Old.DrawOnCanvas(image_txmppreview.Canvas, 2);
58 >  OniImage_Old.DrawOnCanvas(image_txmppreview.Canvas, 1);
59  
60    check_fading.Checked := OniImage_Old.HasMipMaps;
61   //  check_transparency.Checked := (depthbyte and $04) > 0;
# Line 66 | Line 65 | begin
65   end;
66  
67  
68 + procedure TForm_TxmpReplace.Splitter1Moved(Sender: TObject);
69 + begin
70 +  inherited;
71 +  image_txmppreview.Picture.Assign(nil);
72 +  image_bmppreview.Picture.Assign(nil);
73 +  if Length(OniImage_Old.Images) > 0 then
74 +    OniImage_Old.DrawOnCanvas(image_txmppreview.Canvas, 1);
75 +  if Length(OniImage_New.Images) > 0 then
76 +    OniImage_New.DrawOnCanvas(image_bmppreview.Canvas, 1);
77 + end;
78 +
79   procedure TForm_TxmpReplace.btn_loadClick(Sender: TObject);
70 var
71  mem:   TMemoryStream;
80   begin
81    if opend.Execute then
82    begin
# Line 89 | Line 97 | var
97    datbyte: Word;
98    mem: TMemoryStream;
99    new_storetype: Byte;
100 +  i: Integer;
101 + const
102 +  powers: array[0..8] of Integer = (1, 2, 4, 8, 16, 32, 64, 128, 256);
103   begin
104    if filelist.ItemIndex >= 0 then
105    begin
# Line 98 | Line 109 | begin
109      else
110        ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $9C, 4, @old_rawaddr);
111  
112 +    if (OniImage_New.Width[1] > 256) or (OniImage_New.Height[1] > 256) then
113 +    begin
114 +      ShowMessage('Widht and height have to be smaller than or equal to 256.');
115 +      Exit;
116 +    end;
117 +    for i := 0 to High(powers) do
118 +      if OniImage_New.Width[1] = powers[i] then
119 +        Break;
120 +    if i = Length(powers) then
121 +    begin
122 +      ShowMessage('Width has to be a power of 2 (1, 2, 4, 8, 16 ...)');
123 +      Exit;
124 +    end;
125 +    for i := 0 to High(powers) do
126 +      if OniImage_New.Height[1] = powers[i] then
127 +        Break;
128 +    if i = Length(powers) then
129 +    begin
130 +      ShowMessage('Height has to be a power of 2 (1, 2, 4, 8, 16 ...)');
131 +      Exit;
132 +    end;
133 +
134      if (OniImage_Old.Width[1] <> OniImage_New.Width[1]) or
135        (OniImage_Old.Height[1] <> OniImage_New.Height[1]) then
136      begin
# Line 116 | Line 149 | begin
149      mem := TMemoryStream.Create;
150  
151      case OniImage_New.Format of
152 +      ifX1R5G5B5: new_storetype := 1;
153        ifA1R5G5B5: new_storetype := 2;
154        ifA4R4G4B4: new_storetype := 0;
155        ifA8R8G8B8:
# Line 126 | Line 160 | begin
160        ifX8R8G8B8: new_storetype := 8;
161        ifDXT1: new_storetype := 9;
162      else
163 +      if OniImage_New.FormatInfo.HasAlphaChannel then
164 +        ShowMessage('Loaded image has an alpha-channel.' + #13#10 +
165 +                    'Because the format is neither ARGB1555' +#13#10 +
166 +                    'nor ARGB4444 it can not be imported without conversion.' + #13#10 +
167 +                    'It is converted to RGB888, so alpha gets dropped.' + #13#10 +
168 +                    'If you need alpha you have to save your image in' + #13#10 +
169 +                    'one of the previously named formats.');  
170        OniImage_New.Format := ifX8R8G8B8;
171        new_storetype := 8;
172      end;
# Line 144 | Line 185 | begin
185        ConManager.Connection[ConnectionID].UpdateRawFile(fileid, $9C, mem);
186      end;
187  
147    datbyte := $00;
188      if check_fading.Checked then
189 <      datbyte := datbyte or $01;
189 >      oldfading := oldfading or $01
190 >    else
191 >      oldfading := oldfading and (not Byte($01));
192      ConManager.Connection[ConnectionID].UpdateDatFilePart(fileid, $88, 1, @datbyte);
193      datbyte := $10;
194   //    if check_transparency.Checked then
# Line 163 | Line 205 | begin
205        ConManager.Connection[ConnectionID].UpdateDatFilePart(fileid, $9C, 4, @new_rawaddr);
206  
207      ShowMessage('TXMP-image replaced');
208 +    Self.listClick(Self);
209    end;
210   end;
211  
# Line 200 | Line 243 | end;
243  
244   begin
245    AddToolListEntry('txmpreplace', 'TXMP Replacer', 'TXMP');
246 < end.
246 > end.
247 >

Diff Legend

Removed lines
+ Added lines
< Changed lines (old)
> Changed lines (new)