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 109 by alloc, Wed Feb 21 03:12:33 2007 UTC vs.
Revision 194 by alloc, Sat May 26 18:26:48 2007 UTC

# Line 27 | Line 27 | type
27      procedure btn_saveClick(Sender: TObject);
28      procedure btn_loadClick(Sender: TObject);
29      procedure btn_replaceClick(Sender: TObject);
30 +    procedure Splitter1Moved(Sender: TObject);
31    private
32      OniImage_Old: TOniImage;
33      OniImage_New: TOniImage;
# Line 40 | Line 41 | var
41  
42   implementation
43   {$R *.dfm}
44 < uses Main, ConnectionManager;
44 > uses Main, ConnectionManager, ImagingTypes;
45  
46  
47  
# Line 53 | Line 54 | begin
54    ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $88, SizeOf(fadingbyte), @fadingbyte);
55    ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $89, SizeOf(depthbyte), @depthbyte);
56    ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $90, SizeOf(storebyte), @storebyte);
56  check_fading.Checked := (fadingbyte and $01) > 0;
57  check_transparency.Checked := (depthbyte and $04) > 0;
57  
58    OniImage_Old.LoadFromTXMP(ConnectionID, fileid);
59 <  old_size := OniImage_Old.GetImageDataSize((fadingbyte and $01) > 0);
60 <  mem  := TMemoryStream.Create;
61 <  OniImage_Old.GetAsBMP(TStream(mem));
62 <  mem.Seek(0, soFromBeginning);
63 <  image_txmppreview.Picture.Bitmap.LoadFromStream(mem);
64 <  mem.Free;
59 >  old_size := OniImage_Old.GetImageSize(True);
60 >  OniImage_Old.DrawOnCanvas(image_txmppreview.Canvas, 1);
61 >
62 >  check_fading.Checked := OniImage_Old.HasMipMaps;
63 > //  check_transparency.Checked := (depthbyte and $04) > 0;
64 >  check_transparency.Checked := storebyte in [0, 2, 7];
65  
66    group_bmpselect.Enabled := True;
67   end;
68  
69  
70 + procedure TForm_TxmpReplace.Splitter1Moved(Sender: TObject);
71 + begin
72 +  inherited;
73 +  image_txmppreview.Picture.Assign(nil);
74 +  image_bmppreview.Picture.Assign(nil);
75 +  if Length(OniImage_Old.Images) > 0 then
76 +    OniImage_Old.DrawOnCanvas(image_txmppreview.Canvas, 1);
77 +  if Length(OniImage_New.Images) > 0 then
78 +    OniImage_New.DrawOnCanvas(image_bmppreview.Canvas, 1);
79 + end;
80 +
81   procedure TForm_TxmpReplace.btn_loadClick(Sender: TObject);
82   var
83    mem:   TMemoryStream;
84   begin
85    if opend.Execute then
86    begin
87 <    OniImage_New.LoadFromBMP(opend.FileName);
88 <    mem   := TMemoryStream.Create;
79 <    OniImage_New.GetAsBMP(TStream(mem));
80 <    mem.Seek(0, soFromBeginning);
81 <    image_bmppreview.Picture.Bitmap.LoadFromStream(mem);
82 <    mem.Free;
87 >    OniImage_New.LoadFromFile(opend.FileName);
88 >    OniImage_New.DrawOnCanvas(image_bmppreview.Canvas, 1);
89      group_options.Enabled := True;
90    end;
91   end;
# Line 89 | Line 95 | end;
95  
96   procedure TForm_TxmpReplace.btn_replaceClick(Sender: TObject);
97   var
98 <  newsize: LongWord;
99 <  old_rawaddr, new_rawaddr: LongWord;
98 >  newsize: Integer;
99 >  old_rawaddr, new_rawaddr: Integer;
100    oldfading: Byte;
101    datbyte: Word;
102    mem: TMemoryStream;
103 +  new_storetype: Byte;
104 +  formatinfo: TImageFormatInfo;
105   begin
106    if filelist.ItemIndex >= 0 then
107    begin
# Line 103 | Line 111 | begin
111      else
112        ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $9C, 4, @old_rawaddr);
113  
114 <    if (OniImage_Old.Width <> OniImage_New.Width) or
115 <      (OniImage_Old.Height <> OniImage_New.Height) then
114 >    if (OniImage_Old.Width[1] <> OniImage_New.Width[1]) or
115 >      (OniImage_Old.Height[1] <> OniImage_New.Height[1]) then
116      begin
117        if MessageBox(Self.Handle,
118              PChar(
119                'Current image and new image have different size' + CrLf +
120 <              '(Current: ' + IntToStr(OniImage_Old.Width) + 'x' +
121 <              IntToStr(OniImage_Old.Height) + ' - New: ' +
122 <              IntToStr(OniImage_New.Width) + 'x' + IntToStr(OniImage_New.Height) +
120 >              '(Current: ' + IntToStr(OniImage_Old.Width[1]) + 'x' +
121 >              IntToStr(OniImage_Old.Height[1]) + ' - New: ' +
122 >              IntToStr(OniImage_New.Width[1]) + 'x' +
123 >              IntToStr(OniImage_New.Height[1]) +
124                ')' + CrLf + 'Replace anyway?'),
125              PChar(filelist.Items.Strings[filelist.ItemIndex]), MB_YESNO) = idNo then
126          Exit;
# Line 119 | Line 128 | begin
128  
129      mem := TMemoryStream.Create;
130  
131 <    if check_fading.Checked then
132 <      if not OniImage_New.GetMipMappedImage(TStream(mem)) then
133 <        if MessageBox(Self.Handle,
134 <              PChar('Can not create a MipMapped-image (probably because of a wrong dimension).' +
135 <                #13 + #10 + 'Do you want to continue without MipMapping?'), PChar('Warning'),
136 <                MB_YESNO) = ID_YES then
137 <          check_fading.Checked := False
138 <        else
139 <          Exit;
140 <
141 <    if not check_fading.Checked then
142 <    begin
143 <      mem.Clear;
144 <      OniImage_New.GetAsData(TStream(mem));
131 >    case OniImage_New.Format of
132 >      ifA1R5G5B5: new_storetype := 2;
133 >      ifA4R4G4B4: new_storetype := 0;
134 >      ifA8R8G8B8:
135 >        begin
136 >          new_storetype := 8;
137 >          OniImage_New.Format := ifX8R8G8B8;
138 >        end;
139 >      ifX8R8G8B8: new_storetype := 8;
140 >      ifDXT1: new_storetype := 9;
141 >    else
142 >      if OniImage_New.FormatInfo.HasAlphaChannel then
143 >        ShowMessage('Loaded image has an alpha-channel.' + #13#10 +
144 >                    'Because the format is neither ARGB1555' +#13#10 +
145 >                    'nor ARGB4444 it can not be imported without conversion.' + #13#10 +
146 >                    'It is converted to RGB888, so alpha gets dropped.' + #13#10 +
147 >                    'If you need alpha you have to save your image in' + #13#10 +
148 >                    'one of the previously named formats.');  
149 >      OniImage_New.Format := ifX8R8G8B8;
150 >      new_storetype := 8;
151      end;
152  
153 <    newsize := OniImage_New.GetImageDataSize(check_fading.Checked);
153 >    OniImage_New.SaveDataToStream(check_fading.Checked, TStream(mem));
154 >
155 >    newsize := mem.Size;
156 >    mem.Seek(0, soFromBeginning);
157  
158      if (newsize > old_size) and (ConManager.Connection[ConnectionID].Backend = DB_ONI) then
159        new_rawaddr := ConManager.Connection[ConnectionID].AppendRawFile(
160 <        not (ConManager.Connection[ConnectionID].DataOS = DOS_WIN), mem.Size, mem)
160 >        not (ConManager.Connection[ConnectionID].DataOS = DOS_WIN), mem)
161      else
162      begin
163        new_rawaddr := old_rawaddr;
# Line 151 | Line 169 | begin
169        datbyte := datbyte or $01;
170      ConManager.Connection[ConnectionID].UpdateDatFilePart(fileid, $88, 1, @datbyte);
171      datbyte := $10;
172 <    if check_transparency.Checked then
173 <      datbyte := datbyte or $04;
172 > //    if check_transparency.Checked then
173 > //      datbyte := datbyte or $04;
174      ConManager.Connection[ConnectionID].UpdateDatFilePart(fileid, $89, 1, @datbyte);
175 <    ConManager.Connection[ConnectionID].UpdateDatFilePart(fileid, $8C, 2, @OniImage_New.Width);
176 <    ConManager.Connection[ConnectionID].UpdateDatFilePart(fileid, $8E, 2, @OniImage_New.Height);
177 <    datbyte := $08;
178 <    ConManager.Connection[ConnectionID].UpdateDatFilePart(fileid, $90, 1, @datbyte);
175 >    datbyte := OniImage_New.Width[1];
176 >    ConManager.Connection[ConnectionID].UpdateDatFilePart(fileid, $8C, 2, @datbyte);
177 >    datbyte := OniImage_New.Height[1];
178 >    ConManager.Connection[ConnectionID].UpdateDatFilePart(fileid, $8E, 2, @datbyte);
179 >    ConManager.Connection[ConnectionID].UpdateDatFilePart(fileid, $90, 1, @new_storetype);
180      if not (ConManager.Connection[ConnectionID].DataOS = DOS_WIN) then
181        ConManager.Connection[ConnectionID].UpdateDatFilePart(fileid, $A0, 4, @new_rawaddr)
182      else
183        ConManager.Connection[ConnectionID].UpdateDatFilePart(fileid, $9C, 4, @new_rawaddr);
184  
185      ShowMessage('TXMP-image replaced');
186 +    Self.listClick(Self);
187    end;
188   end;
189  
# Line 187 | Line 207 | begin
207    OniImage_New := TOniImage.Create;
208    Self.AllowedExts := 'TXMP';
209    Self.OnNewFileSelected := SelectFile;
210 +  opend.Filter := saved.Filter;
211   end;
212  
213  
# Line 195 | Line 216 | end;
216   procedure TForm_TxmpReplace.btn_saveClick(Sender: TObject);
217   begin
218    if saved.Execute then
219 <    OniImage_Old.WriteToBMP(saved.FileName);
219 >    OniImage_Old.WriteToFile(saved.FileName);
220   end;
221  
222   begin

Diff Legend

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