From 84d4e52eaee3947e0111c882cecafea938e90de5 Mon Sep 17 00:00:00 2001 From: marc Date: Sun, 23 Jun 2013 19:46:43 +0000 Subject: [PATCH] Add scanline support git-svn-id: trunk@41855 - --- lcl/graphics.pp | 3 ++- lcl/graphtype.pp | 9 +++++++++ lcl/include/rasterimage.inc | 8 ++++++++ 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/lcl/graphics.pp b/lcl/graphics.pp index 2970bbdc1b..e4925be268 100644 --- a/lcl/graphics.pp +++ b/lcl/graphics.pp @@ -1297,6 +1297,7 @@ type procedure FreeCanvasContext; function GetCanvas: TCanvas; function GetRawImage: TRawImage; + function GetScanline(ARow: Integer): Pointer; function GetTransparentColor: TColor; procedure SetTransparentColor(AValue: TColor); protected @@ -1379,7 +1380,7 @@ type property MaskHandle: HBITMAP read GetMaskHandle write SetMaskHandle; property PixelFormat: TPixelFormat read GetPixelFormat write SetPixelFormat default pfDevice; property RawImage: TRawImage read GetRawImage; // be carefull with this, modify only within a begin/endupdate - // property ScanLine[Row: Integer]: Pointer; -> Use TLazIntfImage for such things + property ScanLine[Row: Integer]: Pointer read GetScanLine; platform; // Use only when wrpped by a begin/endupdate property TransparentColor: TColor read GetTransparentColor write SetTransparentColor default clDefault; property TransparentMode: TTransparentMode read FTransparentMode diff --git a/lcl/graphtype.pp b/lcl/graphtype.pp index 7aeb2e3bb6..54e297bb36 100644 --- a/lcl/graphtype.pp +++ b/lcl/graphtype.pp @@ -209,6 +209,7 @@ type procedure ReleaseData; procedure ExtractRect(const ARect: TRect; out ADst: TRawImage); + function GetLineStart(ALine: Cardinal): PByte; procedure PerformEffect(const ADrawEffect: TGraphicsDrawEffect; CreateNewData: Boolean = True; FreeOldData: boolean = false); function ReadBits(const APosition: TRawImagePosition; APrec, AShift: Byte): Word; procedure ReadChannels(const APosition: TRawImagePosition; out ARed, AGreen, ABlue, AAlpha: Word); @@ -1585,6 +1586,14 @@ begin Description.MaskLineEnd, ADst.Mask, ADst.MaskSize); end; +function TRawImage.GetLineStart(ALine: Cardinal): PByte; +begin + Result := Data; + if Result = nil then Exit; + if ALine = 0 then Exit; + Inc(Result, ALine * Description.BytesPerLine); +end; + procedure TRawImage.PerformEffect(const ADrawEffect: TGraphicsDrawEffect; CreateNewData: Boolean; FreeOldData: boolean); diff --git a/lcl/include/rasterimage.inc b/lcl/include/rasterimage.inc index fefdbe88a1..5f407ffb98 100644 --- a/lcl/include/rasterimage.inc +++ b/lcl/include/rasterimage.inc @@ -467,6 +467,14 @@ begin else Result := p^; end; +function TRasterImage.GetScanline(ARow: Integer): Pointer; +var + RI: TRawImage; +begin + RI := GetRawImage; + Result := RI.GetLineStart(ARow); +end; + function TRasterImage.GetTransparentColor: TColor; begin if FTransparentColor = clDefault