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

Comparing:
oup/rewrite/Tools/TxmpReplace.pas (file contents), Revision 93 by alloc, Thu Jan 18 17:15:59 2007 UTC vs.
oup/current/Tools/TxmpReplace.pas (file contents), Revision 193 by alloc, Sat May 26 14:24:55 2007 UTC

# Line 3 | Line 3 | interface
3   uses
4    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
5    Dialogs, Template, StdCtrls, ExtCtrls,
6 <  Functions, Data, OniImgClass, Menus, Buttons;
6 >  Functions, Data, OniImgClass, Menus, Buttons, TypeDefs;
7  
8   type
9    TForm_TxmpReplace = class(TForm_ToolTemplate)
# Line 40 | Line 40 | var
40  
41   implementation
42   {$R *.dfm}
43 < uses Main, OniDataClass;
43 > uses Main, ConnectionManager, ImagingTypes;
44  
45  
46  
47   procedure TForm_TxmpReplace.SelectFile(fileinfo: TFileInfo);
48   var
49  Data: Tdata;
49    mem:  TMemoryStream;
50    fadingbyte, depthbyte, storebyte: Byte;
51   begin
52    fileid := fileinfo.ID;
53 <  Connection.LoadDatFilePart(fileid, $88, SizeOf(fadingbyte), @fadingbyte);
54 <  Connection.LoadDatFilePart(fileid, $89, SizeOf(depthbyte), @depthbyte);
55 <  Connection.LoadDatFilePart(fileid, $90, SizeOf(storebyte), @storebyte);
56 <  check_fading.Checked := (fadingbyte and $01) > 0;
57 <  check_transparency.Checked := (depthbyte and $04) > 0;
58 <
59 <  OniImage_Old.LoadFromTXMP(connection, fileid);
60 <  old_size := OniImage_Old.GetImageDataSize((fadingbyte and $01) > 0);
61 <  Data := OniImage_Old.GetAsBMP;
62 <  mem  := TMemoryStream.Create;
63 <  mem.Write(Data[0], Length(Data));
65 <  mem.Seek(0, soFromBeginning);
66 <  image_txmppreview.Picture.Bitmap.LoadFromStream(mem);
67 <  mem.Free;
53 >  ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $88, SizeOf(fadingbyte), @fadingbyte);
54 >  ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $89, SizeOf(depthbyte), @depthbyte);
55 >  ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $90, SizeOf(storebyte), @storebyte);
56 >
57 >  OniImage_Old.LoadFromTXMP(ConnectionID, fileid);
58 >  old_size := OniImage_Old.GetImageSize(True);
59 >  OniImage_Old.DrawOnCanvas(image_txmppreview.Canvas, 2);
60 >
61 >  check_fading.Checked := OniImage_Old.HasMipMaps;
62 > //  check_transparency.Checked := (depthbyte and $04) > 0;
63 >  check_transparency.Checked := storebyte in [0, 2, 7];
64  
65    group_bmpselect.Enabled := True;
66   end;
# Line 73 | Line 69 | end;
69   procedure TForm_TxmpReplace.btn_loadClick(Sender: TObject);
70   var
71    mem:   TMemoryStream;
76  tempd: Tdata;
72   begin
73    if opend.Execute then
74    begin
75 <    OniImage_New.LoadFromBMP(opend.FileName);
76 <    tempd := OniImage_New.GetAsBMP;
82 <    mem   := TMemoryStream.Create;
83 <    mem.Write(tempd[0], Length(tempd));
84 <    mem.Seek(0, soFromBeginning);
85 <    image_bmppreview.Picture.Bitmap.LoadFromStream(mem);
86 <    mem.Free;
75 >    OniImage_New.LoadFromFile(opend.FileName);
76 >    OniImage_New.DrawOnCanvas(image_bmppreview.Canvas, 1);
77      group_options.Enabled := True;
78    end;
79   end;
# Line 93 | Line 83 | end;
83  
84   procedure TForm_TxmpReplace.btn_replaceClick(Sender: TObject);
85   var
86 <  newsize: LongWord;
87 <  old_rawaddr, new_rawaddr: LongWord;
86 >  newsize: Integer;
87 >  old_rawaddr, new_rawaddr: Integer;
88    oldfading: Byte;
99  tempd:     Tdata;
100
89    datbyte: Word;
90 +  mem: TMemoryStream;
91 +  new_storetype: Byte;
92   begin
93    if filelist.ItemIndex >= 0 then
94    begin
95 <    Connection.LoadDatFilePart(fileid, $88, 1, @oldfading);
96 <    if Connection.OSisMac then
97 <      Connection.UpdateDatFilePart(fileid, $A0, 4, @old_rawaddr)
95 >    ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $88, 1, @oldfading);
96 >    if not (ConManager.Connection[ConnectionID].DataOS = DOS_WIN) then
97 >      ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $A0, 4, @old_rawaddr)
98      else
99 <      Connection.LoadDatFilePart(fileid, $9C, 4, @old_rawaddr);
99 >      ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $9C, 4, @old_rawaddr);
100  
101 <    if (OniImage_Old.Width <> OniImage_New.Width) or
102 <      (OniImage_Old.Height <> OniImage_New.Height) then
101 >    if (OniImage_Old.Width[1] <> OniImage_New.Width[1]) or
102 >      (OniImage_Old.Height[1] <> OniImage_New.Height[1]) then
103      begin
104 <      if MessageBox(Self.Handle, PChar(
105 <        'Current image and new image have different size' + CrLf +
106 <        '(Current: ' + IntToStr(OniImage_Old.Width) +
107 <        'x' + IntToStr(OniImage_Old.Height) + ' - New: ' +
108 <        IntToStr(OniImage_New.Width) + 'x' + IntToStr(OniImage_New.Height) + ')' + CrLf +
109 <        'Replace anyways?'),
110 <        PChar(filelist.Items.Strings[filelist.ItemIndex]),
111 <        MB_YESNO) = idNo then
104 >      if MessageBox(Self.Handle,
105 >            PChar(
106 >              'Current image and new image have different size' + CrLf +
107 >              '(Current: ' + IntToStr(OniImage_Old.Width[1]) + 'x' +
108 >              IntToStr(OniImage_Old.Height[1]) + ' - New: ' +
109 >              IntToStr(OniImage_New.Width[1]) + 'x' +
110 >              IntToStr(OniImage_New.Height[1]) +
111 >              ')' + CrLf + 'Replace anyway?'),
112 >            PChar(filelist.Items.Strings[filelist.ItemIndex]), MB_YESNO) = idNo then
113          Exit;
114      end;
115  
116 <    if check_fading.Checked then
117 <      if not OniImage_New.GetMipMappedImage(tempd) then
118 <        if MessageBox(Self.Handle,
119 <          PChar('Can not create a MipMapped-image (probably because of a wrong dimension).' +
120 <          #13 + #10 + 'Do you want to continue without MipMapping?'), PChar('Warning'),
121 <          MB_YESNO) = ID_YES then
122 <          check_fading.Checked := False
123 <        else
124 <          Exit;
125 <
126 <    if not check_fading.Checked then
127 <      tempd := OniImage_New.GetAsData;
128 <
129 <    newsize := OniImage_New.GetImageDataSize(check_fading.Checked);
130 <
131 <    if (newsize > old_size) and (Connection.Backend = ODB_Dat) then
132 <      new_rawaddr := Connection.AppendRawFile(
133 <        Connection.OSisMac, Length(tempd), tempd)
116 >    mem := TMemoryStream.Create;
117 >
118 >    case OniImage_New.Format of
119 >      ifA1R5G5B5: new_storetype := 2;
120 >      ifA4R4G4B4: new_storetype := 0;
121 >      ifA8R8G8B8:
122 >        begin
123 >          new_storetype := 8;
124 >          OniImage_New.Format := ifX8R8G8B8;
125 >        end;
126 >      ifX8R8G8B8: new_storetype := 8;
127 >      ifDXT1: new_storetype := 9;
128 >    else
129 >      OniImage_New.Format := ifX8R8G8B8;
130 >      new_storetype := 8;
131 >    end;
132 >
133 >    OniImage_New.SaveDataToStream(check_fading.Checked, TStream(mem));
134 >
135 >    newsize := mem.Size;
136 >    mem.Seek(0, soFromBeginning);
137 >
138 >    if (newsize > old_size) and (ConManager.Connection[ConnectionID].Backend = DB_ONI) then
139 >      new_rawaddr := ConManager.Connection[ConnectionID].AppendRawFile(
140 >        not (ConManager.Connection[ConnectionID].DataOS = DOS_WIN), mem)
141      else
142      begin
143        new_rawaddr := old_rawaddr;
144 <      Connection.UpdateRawFile(fileid, $9C, Length(tempd), tempd);
144 >      ConManager.Connection[ConnectionID].UpdateRawFile(fileid, $9C, mem);
145      end;
146  
147      datbyte := $00;
148      if check_fading.Checked then
149        datbyte := datbyte or $01;
150 <    Connection.UpdateDatFilePart(fileid, $88, 1, @datbyte);
150 >    ConManager.Connection[ConnectionID].UpdateDatFilePart(fileid, $88, 1, @datbyte);
151      datbyte := $10;
152 <    if check_transparency.Checked then
153 <      datbyte := datbyte or $04;
154 <    Connection.UpdateDatFilePart(fileid, $89, 1, @datbyte);
155 <    Connection.UpdateDatFilePart(fileid, $8C, 2, @OniImage_New.Width);
156 <    Connection.UpdateDatFilePart(fileid, $8E, 2, @OniImage_New.Height);
157 <    datbyte := $08;
158 <    Connection.UpdateDatFilePart(fileid, $90, 1, @datbyte);
159 <    if Connection.OSisMac then
160 <      Connection.UpdateDatFilePart(fileid, $A0, 4, @new_rawaddr)
152 > //    if check_transparency.Checked then
153 > //      datbyte := datbyte or $04;
154 >    ConManager.Connection[ConnectionID].UpdateDatFilePart(fileid, $89, 1, @datbyte);
155 >    datbyte := OniImage_New.Width[1];
156 >    ConManager.Connection[ConnectionID].UpdateDatFilePart(fileid, $8C, 2, @datbyte);
157 >    datbyte := OniImage_New.Height[1];
158 >    ConManager.Connection[ConnectionID].UpdateDatFilePart(fileid, $8E, 2, @datbyte);
159 >    ConManager.Connection[ConnectionID].UpdateDatFilePart(fileid, $90, 1, @new_storetype);
160 >    if not (ConManager.Connection[ConnectionID].DataOS = DOS_WIN) then
161 >      ConManager.Connection[ConnectionID].UpdateDatFilePart(fileid, $A0, 4, @new_rawaddr)
162      else
163 <      Connection.UpdateDatFilePart(fileid, $9C, 4, @new_rawaddr);
163 >      ConManager.Connection[ConnectionID].UpdateDatFilePart(fileid, $9C, 4, @new_rawaddr);
164  
165      ShowMessage('TXMP-image replaced');
166    end;
# Line 187 | Line 186 | begin
186    OniImage_New := TOniImage.Create;
187    Self.AllowedExts := 'TXMP';
188    Self.OnNewFileSelected := SelectFile;
189 +  opend.Filter := saved.Filter;
190   end;
191  
192  
# Line 195 | Line 195 | end;
195   procedure TForm_TxmpReplace.btn_saveClick(Sender: TObject);
196   begin
197    if saved.Execute then
198 <    OniImage_Old.WriteToBMP(saved.FileName);
198 >    OniImage_Old.WriteToFile(saved.FileName);
199   end;
200  
201   begin

Diff Legend

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