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

Comparing:
oup/rewrite/Global/OniImgClass.pas (file contents), Revision 97 by alloc, Mon Jan 22 23:05:45 2007 UTC vs.
oup/current/Global/OniImgClass.pas (file contents), Revision 113 by alloc, Sun Feb 25 17:20:22 2007 UTC

# Line 38 | Line 38 | type
38      function LoadFromTXMB(ConnectionID, FileID: Integer): Boolean;
39      function GetImageDataSize(fading: Boolean): Integer;
40  
41 <    function GetAsData: TByteData;
42 <    function GetAs32bit: TByteData;
43 <    procedure GetAsBMP(var Target: TByteData); overload;
41 >    procedure GetAsData(var Target: TStream); overload;
42 >    procedure GetAsData(var Target: TByteData); overload;
43 >    procedure GetAs32bit(var Target: TStream); overload;
44 >    procedure GetAs32bit(var Target: TByteData); overload;
45      procedure GetAsBMP(var Target: TStream); overload;
46 +    procedure GetAsBMP(var Target: TByteData); overload;
47      function LoadFromBMP(filename: String): Boolean;
48      function WriteToBMP(filename: String): Boolean;
49 <    function GetMipMappedImage(var faded: TByteData): Boolean;
49 >    function GetMipMappedImage(var Target: TStream): Boolean; overload;
50 >    function GetMipMappedImage(var Target: TByteData): Boolean; overload;
51    published
52    end;
53  
# Line 137 | Line 140 | begin
140    begin
141      SetLength(tempd, Self.FWidth * Self.FHeight * 4);
142      case Self.FStoreType of
143 <      0:
143 >      0: // 16bit, RGB444, A4?
144        begin
145          for y := 0 to Self.FHeight - 1 do
146          begin
# Line 156 | Line 159 | begin
159            end;
160          end;
161        end;
162 <      1, 2:
162 >      1, 2: // 16bit, RGB555, A1?
163        begin
164          for y := 0 to Self.FHeight - 1 do
165          begin
# Line 175 | Line 178 | begin
178            end;
179          end;
180        end;
181 <      9:
181 >      8: // 32bit, RGB888, A8?
182 >      begin end;
183 >      9: // Compressed, RGB565
184        begin
185          DecompressImage;
186        end;
# Line 306 | Line 311 | end;
311   function TOniImage.Load(ConnectionID, FileID: Integer): Boolean;
312   var
313    FileInfo: TFileInfo;
309  ext:      String;
314   begin
315    FileInfo := ConManager.Connection[ConnectionID].GetFileInfo(fileid);
316    if FileInfo.Extension = 'PSpc' then
# Line 368 | Line 372 | begin
372    txmpimg.LoadFromTXMP(ConnectionID, PSpc.TXMP);
373    txmpimg.DecodeImage;
374   //  txmpimg.WriteToBMP('C:\file.bmp');
375 <  txmpdata := txmpimg.GetAs32bit;
375 >  txmpimg.GetAs32bit(txmpdata);
376   {    ShowMessage(IntToStr(txmpimg.Width)+'x'+IntToStr(txmpimg.Height));
377      for i:=0 to High(txmpdata) do
378        txmpimg.Data[i]:=txmpdata[i];
# Line 614 | Line 618 | end;
618  
619  
620  
621 < function TOniImage.GetAsData: TByteData;
621 > procedure TOniImage.GetAsData(var Target: TStream);
622   var
619  i:      Integer;
623    revert: Boolean;
624   begin
625    //    if not (DT_Decoded32 in Self.FDataType) then
# Line 628 | Line 631 | begin
631    end
632    else
633      revert := False;
634 <  SetLength(Result, Length(Self.FData));
635 <  for i := 0 to High(Result) do
636 <    Result[i] := Self.FData[i];
634 >  if not Assigned(Target) then
635 >    Target := TMemoryStream.Create;
636 >  Target.Write(FData[0], Length(FData));
637 >  Target.Seek(0, soFromBeginning);
638    if revert then
639      Self.RevertImage;
640   end;
641  
642 + procedure TOniImage.GetAsData(var Target: TByteData);
643 + var
644 +  mem: TStream;
645 + begin
646 +  mem := TMemoryStream.Create;
647 +  GetAsData(mem);
648 +  SetLength(Target, mem.Size);
649 +  mem.Read(Target[0], mem.Size);
650 +  mem.Free;
651 + end;
652  
653  
654 <
641 < function TOniImage.GetAs32bit: TByteData;
642 < var
643 <  i: Integer;
654 > procedure TOniImage.GetAs32bit(var Target: TStream);
655   begin
656    if not (DT_Decoded32 in Self.FDataType) then
657      Self.DecodeImage;
658 <  SetLength(Result, Length(Self.FData));
659 <  for i := 0 to High(Result) do
660 <    Result[i] := Self.FData[i];
658 >  if not Assigned(Target) then
659 >    Target := TMemoryStream.Create;
660 >  Target.Write(FData[0], Length(FData));
661 >  Target.Seek(0, soFromBeginning);
662   end;
663  
664 <
664 > procedure TOniImage.GetAs32bit(var Target: TByteData);
665 > var
666 >  mem: TStream;
667 > begin
668 >  mem := TMemoryStream.Create;
669 >  GetAs32bit(mem);
670 >  SetLength(Target, mem.Size);
671 >  mem.Read(Target[0], mem.Size);
672 >  mem.Free;
673 > end;
674  
675  
676   procedure TOniImage.GetAsBMP(var Target: TByteData);
# Line 699 | Line 720 | end;
720   procedure TOniImage.GetAsBMP(var Target: TStream);
721   var
722    data: TByteData;
723 +  streampos: Integer;
724   begin
725    GetAsBMP(data);
726 +  streampos := Target.Position;
727    Target.Write(data[0], Length(data));
728 +  Target.Seek(streampos, soFromBeginning);
729   end;
730  
731  
# Line 782 | Line 806 | end;
806  
807  
808  
809 <
786 < function TOniImage.GetMipMappedImage(var faded: TByteData): Boolean;
809 > function TOniImage.GetMipMappedImage(var Target: TByteData): Boolean;
810   var
811    i:      Integer;
812    x, y:   Word;
# Line 806 | Line 829 | begin
829  
830    x := Self.FWidth;
831    y := Self.FHeight;
832 <  SetLength(faded, x * y * Self.FDepth div 8);
832 >  SetLength(Target, x * y * Self.FDepth div 8);
833    SetLength(fadelvldata, x * y * Self.FDepth div 8);
834 <  for i := 0 to Length(faded) - 1 do
834 >  for i := 0 to Length(Target) - 1 do
835    begin
836 <    faded[i] := Self.FData[i];
836 >    Target[i] := Self.FData[i];
837      fadelvldata[i] := Self.FData[i];
838    end;
839    repeat
840      fadelvldata := Self.ResizeImage(x, y, fadelvldata);
841      x := x div 2;
842      y := y div 2;
843 <    SetLength(faded, Length(faded) + x * y * Self.FDepth div 8);
843 >    SetLength(Target, Length(Target) + x * y * Self.FDepth div 8);
844      for i := 0 to Length(fadelvldata) - 1 do
845 <      faded[Length(faded) - x * y * Self.FDepth div 8 + i] := fadelvldata[i];
845 >      Target[Length(Target) - x * y * Self.FDepth div 8 + i] := fadelvldata[i];
846    until (x = 1) or (y = 1) or ((x mod 2) = 1) or ((y mod 2) = 1);
847    if (x > 1) and (y > 1) then
848      Exit;
# Line 830 | Line 853 | begin
853   end;
854  
855  
856 + function TOniImage.GetMipMappedImage(var Target: TStream): Boolean;
857 + var
858 +  data: TByteData;
859 +  streampos: Integer;
860 + begin
861 +  Result := GetMipMappedImage(data);
862 +  if not Assigned(Target) then
863 +    Target := TMemoryStream.Create;
864 +  streampos := Target.Position;
865 +  Target.Write(data[0], Length(data));
866 +  Target.Seek(streampos, soFromBeginning);
867 + end;
868 +
869 +
870   end.

Diff Legend

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