AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi DrawBitmap Pixelated mit Firemonkey unter Android/GPUCanvas
Thema durchsuchen
Ansicht
Themen-Optionen

DrawBitmap Pixelated mit Firemonkey unter Android/GPUCanvas

Ein Thema von milos · begonnen am 23. Mai 2016 · letzter Beitrag vom 9. Jun 2016
 
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.074 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: DrawBitmap Pixelated mit Firemonkey unter Android/GPUCanvas

  Alt 23. Mai 2016, 16:36
TCanvas ist unter Firemonkey ja nur eine Abstraktion.

Je nach Plattform und Einstellung wird dann eine konkrete Implementierung eingesetzt:
FMX.Canvas.D2D.TCanvasD2D für Windows mit Direct2D 1.0 Technologie, Android wird wohl den FMX.Canvas.GPU.TCanvasGpu bekommen. Daneben gibt es noch GDI+ in FMX.Canvas.GDIP.TCanvasGdiPlus und für Apple-Kram den FMX.Canvas.Mac.TCanvasQuartz.

Wenn du mal in die jeweilige Implementierung der verschiedenen Canvas-Klassen reinschaust, wirst du sehen, dass nur beim GPU-Canvas die Einstellung für HighSpeed ins Leere läuft und damit keine Auswirkung hat.


Delphi-Quellcode:
procedure TCanvasD2D.DoDrawBitmap(const ABitmap: TBitmap; const SrcRect, DstRect: TRectF; const AOpacity: Single;
  const HighSpeed: Boolean);
var
  SR, DR: TD2D1RectF;
  IntMode: TD2D1BitmapInterpolationMode;
  B: ID2D1Bitmap;
begin
  if FTarget <> nil then
  begin
    SR := D2Rect(SrcRect);
    DR := D2Rect(DstRect);

    if ABitmap.HandleAllocated then
    begin
      if HighSpeed then
        IntMode := D2D1_BITMAP_INTERPOLATION_MODE_NEAREST_NEIGHBOR
      else
        IntMode := D2D1_BITMAP_INTERPOLATION_MODE_LINEAR;

      B := TD2DBitmapHandle(ABitmap.Handle).CreateBitmap(FTarget);
      if B <> nil then
        FTarget.DrawBitmap(B, @DR, AOpacity, IntMode, @SR);
    end;
  end;
end;
Delphi-Quellcode:
procedure TCanvasGpu.DoDrawBitmap(const ABitmap: TBitmap; const SrcRect, DstRect: TRectF; const AOpacity: Single;
  const HighSpeed: Boolean);
var
  B: TBitmapCtx;
  Bmp: TBitmap;
begin
  if FContext <> nil then
  begin
    Bmp := ABitmap;
    if Bmp.HandleAllocated then
    begin
      B := TBitmapCtx(Bmp.Handle);
      FCanvasHelper.TexRect(TransformBounds(CornersF(DstRect)), CornersF(SrcRect.Left, SrcRect.Top, SrcRect.Width,
        SrcRect.Height), B.PaintingTexture, PrepareColor(FModulateColor, AOpacity));
    end;
  end;
end;
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:24 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz