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
|
||||
destructor Destroy; override;
|
||||
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 ImageType: TsImagetype read FImageType;
|
||||
property ImageWidth: Double read FWidth write FWidth;
|
||||
@ -888,11 +889,15 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
function TsEmbeddedObj.LoadFromStream(AStream: TStream; AName: String): Boolean;
|
||||
function TsEmbeddedObj.LoadFromStream(AStream: TStream; AName: String;
|
||||
ASize: Int64 = -1): Boolean;
|
||||
begin
|
||||
FreeAndNil(FStream);
|
||||
FStream := TMemoryStream.Create;
|
||||
FStream.CopyFrom(AStream, AStream.Size);
|
||||
if ASize = -1 then
|
||||
FStream.LoadFromStream(AStream)
|
||||
else
|
||||
FStream.CopyFrom(AStream, ASize);
|
||||
Result := CheckStream(itUnknown);
|
||||
if Result then FFileName := AName;
|
||||
end;
|
||||
|
@ -529,11 +529,11 @@ type
|
||||
AOffsetX: Double = 0.0; AOffsetY: Double = 0.0;
|
||||
AScaleX: Double = 1.0; AScaleY: Double = 1.0): Integer; overload;
|
||||
function WriteImage(ARow, ACol: Cardinal; AStream: TStream;
|
||||
AOffsetX: Double = 0.0; AOffsetY: Double = 0.0;
|
||||
AScaleX: Double = 1.0; AScaleY: Double = 1.0): Integer; overload;
|
||||
AOffsetX: Double = 0.0; AOffsetY: Double = 0.0; AScaleX: Double = 1.0;
|
||||
AScaleY: Double = 1.0; ASize: Int64 = -1): Integer; overload;
|
||||
function WriteImage(ARow, ACol: Cardinal; AImageIndex: Integer;
|
||||
AOffsetX: Double = 0.0; AOffsetY: Double = 0.0;
|
||||
AScaleX: Double = 1.0; AScaleY: Double = 1.0): Integer; overload;
|
||||
AOffsetX: Double = 0.0; AOffsetY: Double = 0.0; AScaleX: Double = 1.0;
|
||||
AScaleY: Double = 1.0): Integer; overload;
|
||||
|
||||
// Notification of changed cells
|
||||
procedure ChangedCell(ARow, ACol: Cardinal);
|
||||
@ -800,7 +800,7 @@ type
|
||||
{ Embedded objects }
|
||||
function AddEmbeddedObj(const AFileName: String): Integer; overload;
|
||||
function AddEmbeddedObj(AStream: TStream;
|
||||
const AName: String = ''): Integer; overload;
|
||||
const AName: String = ''; ASize: Int64 = -1): Integer; overload;
|
||||
function FindEmbeddedObj(const AFileName: String): Integer;
|
||||
function GetEmbeddedObj(AIndex: Integer): TsEmbeddedObj;
|
||||
function GetEmbeddedObjCount: Integer;
|
||||
@ -3569,16 +3569,19 @@ end;
|
||||
Value is in workbook units.
|
||||
@param AScaleX Horizontal 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.
|
||||
-------------------------------------------------------------------------------}
|
||||
function TsWorksheet.WriteImage(ARow, ACol: Cardinal; AStream: TStream;
|
||||
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
|
||||
idx: Integer;
|
||||
begin
|
||||
// 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.
|
||||
if idx = -1 then
|
||||
exit;
|
||||
@ -8723,12 +8726,12 @@ end;
|
||||
Returns the index of the embedded object.
|
||||
-------------------------------------------------------------------------------}
|
||||
function TsWorkbook.AddEmbeddedObj(AStream: TStream;
|
||||
const AName: String = ''): Integer;
|
||||
const AName: String = ''; ASize: Int64 = -1): Integer;
|
||||
var
|
||||
obj: TsEmbeddedObj = nil;
|
||||
begin
|
||||
obj := TsEmbeddedObj.Create;
|
||||
if obj.LoadFromStream(AStream, AName) then
|
||||
if obj.LoadFromStream(AStream, AName, ASize) then
|
||||
begin
|
||||
obj.ImageWidth := ConvertUnits(obj.ImageWidth, suInches, FUnits);
|
||||
obj.ImageHeight := ConvertUnits(obj.ImageHeight, suInches, FUnits);
|
||||
|
Reference in New Issue
Block a user