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 101 by alloc, Tue Feb 20 20:43:29 2007 UTC vs.
Revision 105 by alloc, Wed Feb 21 00:29:27 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 368 | Line 371 | begin
371    txmpimg.LoadFromTXMP(ConnectionID, PSpc.TXMP);
372    txmpimg.DecodeImage;
373   //  txmpimg.WriteToBMP('C:\file.bmp');
374 <  txmpdata := txmpimg.GetAs32bit;
374 >  txmpimg.GetAs32bit(txmpdata);
375   {    ShowMessage(IntToStr(txmpimg.Width)+'x'+IntToStr(txmpimg.Height));
376      for i:=0 to High(txmpdata) do
377        txmpimg.Data[i]:=txmpdata[i];
# Line 614 | Line 617 | end;
617  
618  
619  
620 < function TOniImage.GetAsData: TByteData;
620 > procedure TOniImage.GetAsData(var Target: TStream);
621   var
622    i:      Integer;
623    revert: Boolean;
# 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 785 | Line 806 | end;
806  
807  
808  
809 <
789 < 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 809 | 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 833 | 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)