--- oup/current/Tools/TxmpReplace.pas 2007/02/21 03:28:48 111 +++ oup/current/Tools/TxmpReplace.pas 2007/05/24 17:48:18 192 @@ -40,7 +40,7 @@ var implementation {$R *.dfm} -uses Main, ConnectionManager; +uses Main, ConnectionManager, ImagingTypes; @@ -53,16 +53,14 @@ begin ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $88, SizeOf(fadingbyte), @fadingbyte); ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $89, SizeOf(depthbyte), @depthbyte); ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $90, SizeOf(storebyte), @storebyte); - check_fading.Checked := (fadingbyte and $01) > 0; - check_transparency.Checked := (depthbyte and $04) > 0; OniImage_Old.LoadFromTXMP(ConnectionID, fileid); - old_size := OniImage_Old.GetImageDataSize((fadingbyte and $01) > 0); - mem := TMemoryStream.Create; - OniImage_Old.GetAsBMP(TStream(mem)); - mem.Seek(0, soFromBeginning); - image_txmppreview.Picture.Bitmap.LoadFromStream(mem); - mem.Free; + old_size := OniImage_Old.GetImageSize(True); + OniImage_Old.DrawOnCanvas(image_txmppreview.Canvas, 0); + + check_fading.Checked := OniImage_Old.HasMipMaps; +// check_transparency.Checked := (depthbyte and $04) > 0; + check_transparency.Checked := storebyte in [0, 2, 7]; group_bmpselect.Enabled := True; end; @@ -74,12 +72,8 @@ var begin if opend.Execute then begin - OniImage_New.LoadFromBMP(opend.FileName); - mem := TMemoryStream.Create; - OniImage_New.GetAsBMP(TStream(mem)); - mem.Seek(0, soFromBeginning); - image_bmppreview.Picture.Bitmap.LoadFromStream(mem); - mem.Free; + OniImage_New.LoadFromFile(opend.FileName); + OniImage_New.DrawOnCanvas(image_bmppreview.Canvas, 0); group_options.Enabled := True; end; end; @@ -103,15 +97,16 @@ begin else ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $9C, 4, @old_rawaddr); - if (OniImage_Old.Width <> OniImage_New.Width) or - (OniImage_Old.Height <> OniImage_New.Height) then + if (OniImage_Old.Width[1] <> OniImage_New.Width[1]) or + (OniImage_Old.Height[1] <> OniImage_New.Height[1]) then begin if MessageBox(Self.Handle, PChar( 'Current image and new image have different size' + CrLf + - '(Current: ' + IntToStr(OniImage_Old.Width) + 'x' + - IntToStr(OniImage_Old.Height) + ' - New: ' + - IntToStr(OniImage_New.Width) + 'x' + IntToStr(OniImage_New.Height) + + '(Current: ' + IntToStr(OniImage_Old.Width[1]) + 'x' + + IntToStr(OniImage_Old.Height[1]) + ' - New: ' + + IntToStr(OniImage_New.Width[1]) + 'x' + + IntToStr(OniImage_New.Height[1]) + ')' + CrLf + 'Replace anyway?'), PChar(filelist.Items.Strings[filelist.ItemIndex]), MB_YESNO) = idNo then Exit; @@ -119,27 +114,15 @@ begin mem := TMemoryStream.Create; - if check_fading.Checked then - if not OniImage_New.GetMipMappedImage(TStream(mem)) then - if MessageBox(Self.Handle, - PChar('Can not create a MipMapped-image (probably because of a wrong dimension).' + - #13 + #10 + 'Do you want to continue without MipMapping?'), PChar('Warning'), - MB_YESNO) = ID_YES then - check_fading.Checked := False - else - Exit; + OniImage_New.SaveDataToStream(check_fading.Checked, TStream(mem)); - if not check_fading.Checked then - begin - mem.Clear; - OniImage_New.GetAsData(TStream(mem)); - end; - - newsize := OniImage_New.GetImageDataSize(check_fading.Checked); + newsize := mem.Size; + mem.Seek(0, soFromBeginning); if (newsize > old_size) and (ConManager.Connection[ConnectionID].Backend = DB_ONI) then new_rawaddr := ConManager.Connection[ConnectionID].AppendRawFile( - not (ConManager.Connection[ConnectionID].DataOS = DOS_WIN), mem.Size, mem) + not (ConManager.Connection[ConnectionID].DataOS = DOS_WIN), + mem.Size, mem) else begin new_rawaddr := old_rawaddr; @@ -151,12 +134,27 @@ begin datbyte := datbyte or $01; ConManager.Connection[ConnectionID].UpdateDatFilePart(fileid, $88, 1, @datbyte); datbyte := $10; - if check_transparency.Checked then - datbyte := datbyte or $04; +// if check_transparency.Checked then +// datbyte := datbyte or $04; ConManager.Connection[ConnectionID].UpdateDatFilePart(fileid, $89, 1, @datbyte); - ConManager.Connection[ConnectionID].UpdateDatFilePart(fileid, $8C, 2, @OniImage_New.Width); - ConManager.Connection[ConnectionID].UpdateDatFilePart(fileid, $8E, 2, @OniImage_New.Height); - datbyte := $08; + datbyte := OniImage_New.Width[1]; + ConManager.Connection[ConnectionID].UpdateDatFilePart(fileid, $8C, 2, @datbyte); + datbyte := OniImage_New.Height[1]; + ConManager.Connection[ConnectionID].UpdateDatFilePart(fileid, $8E, 2, @datbyte); + case OniImage_New.Format of + ifA1R5G5B5: datbyte := 2; + ifA4R4G4B4: datbyte := 0; + ifA8R8G8B8: + begin + datbyte := 8; + OniImage_New.Format := ifX8R8G8B8; + end; + ifX8R8G8B8: datbyte := 8; + ifDXT1: datbyte := 9; + else + OniImage_New.Format := ifX8R8G8B8; + datbyte := 8; + end; ConManager.Connection[ConnectionID].UpdateDatFilePart(fileid, $90, 1, @datbyte); if not (ConManager.Connection[ConnectionID].DataOS = DOS_WIN) then ConManager.Connection[ConnectionID].UpdateDatFilePart(fileid, $A0, 4, @new_rawaddr) @@ -187,6 +185,7 @@ begin OniImage_New := TOniImage.Create; Self.AllowedExts := 'TXMP'; Self.OnNewFileSelected := SelectFile; + opend.Filter := saved.Filter; end; @@ -195,7 +194,7 @@ end; procedure TForm_TxmpReplace.btn_saveClick(Sender: TObject); begin if saved.Execute then - OniImage_Old.WriteToBMP(saved.FileName); + OniImage_Old.WriteToFile(saved.FileName); end; begin