You've already forked lazarus-ccr
fpspreadsheet: Fix writing of images from stream (issue #30633)
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@5204 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
@ -51,7 +51,8 @@ type
|
|||||||
public
|
public
|
||||||
destructor Destroy; override;
|
destructor Destroy; override;
|
||||||
function LoadFromFile(const AFileName: String): Boolean;
|
function LoadFromFile(const AFileName: String): Boolean;
|
||||||
function LoadFromStream(AStream: TStream; AName: String): Boolean;
|
function LoadFromStream(AStream: TStream; AName: String;
|
||||||
|
ASize: Int64 = -1): Boolean;
|
||||||
property FileName: String read FFileName;
|
property FileName: String read FFileName;
|
||||||
property ImageType: TsImagetype read FImageType;
|
property ImageType: TsImagetype read FImageType;
|
||||||
property ImageWidth: Double read FWidth write FWidth;
|
property ImageWidth: Double read FWidth write FWidth;
|
||||||
@ -888,11 +889,15 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TsEmbeddedObj.LoadFromStream(AStream: TStream; AName: String): Boolean;
|
function TsEmbeddedObj.LoadFromStream(AStream: TStream; AName: String;
|
||||||
|
ASize: Int64 = -1): Boolean;
|
||||||
begin
|
begin
|
||||||
FreeAndNil(FStream);
|
FreeAndNil(FStream);
|
||||||
FStream := TMemoryStream.Create;
|
FStream := TMemoryStream.Create;
|
||||||
FStream.CopyFrom(AStream, AStream.Size);
|
if ASize = -1 then
|
||||||
|
FStream.LoadFromStream(AStream)
|
||||||
|
else
|
||||||
|
FStream.CopyFrom(AStream, ASize);
|
||||||
Result := CheckStream(itUnknown);
|
Result := CheckStream(itUnknown);
|
||||||
if Result then FFileName := AName;
|
if Result then FFileName := AName;
|
||||||
end;
|
end;
|
||||||
|
@ -529,11 +529,11 @@ type
|
|||||||
AOffsetX: Double = 0.0; AOffsetY: Double = 0.0;
|
AOffsetX: Double = 0.0; AOffsetY: Double = 0.0;
|
||||||
AScaleX: Double = 1.0; AScaleY: Double = 1.0): Integer; overload;
|
AScaleX: Double = 1.0; AScaleY: Double = 1.0): Integer; overload;
|
||||||
function WriteImage(ARow, ACol: Cardinal; AStream: TStream;
|
function WriteImage(ARow, ACol: Cardinal; AStream: TStream;
|
||||||
AOffsetX: Double = 0.0; AOffsetY: Double = 0.0;
|
AOffsetX: Double = 0.0; AOffsetY: Double = 0.0; AScaleX: Double = 1.0;
|
||||||
AScaleX: Double = 1.0; AScaleY: Double = 1.0): Integer; overload;
|
AScaleY: Double = 1.0; ASize: Int64 = -1): Integer; overload;
|
||||||
function WriteImage(ARow, ACol: Cardinal; AImageIndex: Integer;
|
function WriteImage(ARow, ACol: Cardinal; AImageIndex: Integer;
|
||||||
AOffsetX: Double = 0.0; AOffsetY: Double = 0.0;
|
AOffsetX: Double = 0.0; AOffsetY: Double = 0.0; AScaleX: Double = 1.0;
|
||||||
AScaleX: Double = 1.0; AScaleY: Double = 1.0): Integer; overload;
|
AScaleY: Double = 1.0): Integer; overload;
|
||||||
|
|
||||||
// Notification of changed cells
|
// Notification of changed cells
|
||||||
procedure ChangedCell(ARow, ACol: Cardinal);
|
procedure ChangedCell(ARow, ACol: Cardinal);
|
||||||
@ -800,7 +800,7 @@ type
|
|||||||
{ Embedded objects }
|
{ Embedded objects }
|
||||||
function AddEmbeddedObj(const AFileName: String): Integer; overload;
|
function AddEmbeddedObj(const AFileName: String): Integer; overload;
|
||||||
function AddEmbeddedObj(AStream: TStream;
|
function AddEmbeddedObj(AStream: TStream;
|
||||||
const AName: String = ''): Integer; overload;
|
const AName: String = ''; ASize: Int64 = -1): Integer; overload;
|
||||||
function FindEmbeddedObj(const AFileName: String): Integer;
|
function FindEmbeddedObj(const AFileName: String): Integer;
|
||||||
function GetEmbeddedObj(AIndex: Integer): TsEmbeddedObj;
|
function GetEmbeddedObj(AIndex: Integer): TsEmbeddedObj;
|
||||||
function GetEmbeddedObjCount: Integer;
|
function GetEmbeddedObjCount: Integer;
|
||||||
@ -3569,16 +3569,19 @@ end;
|
|||||||
Value is in workbook units.
|
Value is in workbook units.
|
||||||
@param AScaleX Horizontal scaling factor of the image
|
@param AScaleX Horizontal scaling factor of the image
|
||||||
@param AScaleY Vertical scaling factor of the image
|
@param AScaleY Vertical scaling factor of the image
|
||||||
|
@param ASize Number ob bytes to be read from the input stream.
|
||||||
@return Index into the internal image list.
|
@return Index into the internal image list.
|
||||||
-------------------------------------------------------------------------------}
|
-------------------------------------------------------------------------------}
|
||||||
function TsWorksheet.WriteImage(ARow, ACol: Cardinal; AStream: TStream;
|
function TsWorksheet.WriteImage(ARow, ACol: Cardinal; AStream: TStream;
|
||||||
AOffsetX: Double = 0.0; AOffsetY: Double = 0.0;
|
AOffsetX: Double = 0.0; AOffsetY: Double = 0.0;
|
||||||
AScaleX: Double = 1.0; AScaleY: Double = 1.0): Integer;
|
AScaleX: Double = 1.0; AScaleY: Double = 1.0;
|
||||||
|
ASize: Int64 = -1): Integer;
|
||||||
var
|
var
|
||||||
idx: Integer;
|
idx: Integer;
|
||||||
begin
|
begin
|
||||||
// Copy the stream to a new item in embedded object list.
|
// Copy the stream to a new item in embedded object list.
|
||||||
idx := Workbook.AddEmbeddedObj(AStream);
|
idx := Workbook.AddEmbeddedObj(AStream, '', ASize);
|
||||||
|
|
||||||
// An error has occured? Error is already logged. Just exit.
|
// An error has occured? Error is already logged. Just exit.
|
||||||
if idx = -1 then
|
if idx = -1 then
|
||||||
exit;
|
exit;
|
||||||
@ -8723,12 +8726,12 @@ end;
|
|||||||
Returns the index of the embedded object.
|
Returns the index of the embedded object.
|
||||||
-------------------------------------------------------------------------------}
|
-------------------------------------------------------------------------------}
|
||||||
function TsWorkbook.AddEmbeddedObj(AStream: TStream;
|
function TsWorkbook.AddEmbeddedObj(AStream: TStream;
|
||||||
const AName: String = ''): Integer;
|
const AName: String = ''; ASize: Int64 = -1): Integer;
|
||||||
var
|
var
|
||||||
obj: TsEmbeddedObj = nil;
|
obj: TsEmbeddedObj = nil;
|
||||||
begin
|
begin
|
||||||
obj := TsEmbeddedObj.Create;
|
obj := TsEmbeddedObj.Create;
|
||||||
if obj.LoadFromStream(AStream, AName) then
|
if obj.LoadFromStream(AStream, AName, ASize) then
|
||||||
begin
|
begin
|
||||||
obj.ImageWidth := ConvertUnits(obj.ImageWidth, suInches, FUnits);
|
obj.ImageWidth := ConvertUnits(obj.ImageWidth, suInches, FUnits);
|
||||||
obj.ImageHeight := ConvertUnits(obj.ImageHeight, suInches, FUnits);
|
obj.ImageHeight := ConvertUnits(obj.ImageHeight, suInches, FUnits);
|
||||||
|
Reference in New Issue
Block a user