![]() |
DrawBitmap Pixelated mit Firemonkey unter Android/GPUCanvas
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,
ich würde gerne ein Bitmap mittels ![]() Komischerweise wird mir hier das Bild trotz HighSpeed = true das Bild auf Android oder allgemein mit dem GPU Canvas nicht Pixelated ausgegeben obwohl ich das gerne hätte. Auf Windows funktioniert das Problemlos mit dem Standardcanvas, schalte ich jedoch ![]() Die Suche auf Google hat nur ergeben das ich den HighSpeed parameter auf true setzen muss jedoch hab ich das ja schon und es klappt nicht... Auch nicht wenn ich ![]() Hat da jemand einen Umweg wie das trotzdem geht? Im Anhang ist noch ein Bild welches den Unterschied zeigt. Freundliche Grüsse |
AW: DrawBitmap Pixelated mit Firemonkey unter Android/GPUCanvas
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; |
AW: DrawBitmap Pixelated mit Firemonkey unter Android/GPUCanvas
Hmm das ist ja ärgerlich :/ Dann nehme ich mal an, dass das so ohne weiteres nicht funktioniert ohne irgendwas zu basteln was stark auf die performance geht, oder?
Freundliche Grüsse |
AW: DrawBitmap Pixelated mit Firemonkey unter Android/GPUCanvas
Selbst die Größe des Bildes anpassen, damit das nicht automatisch geschieht.
|
AW: DrawBitmap Pixelated mit Firemonkey unter Android/GPUCanvas
Zitat:
Freundliche Grüsse |
AW: DrawBitmap Pixelated mit Firemonkey unter Android/GPUCanvas
Zitat:
So hast du selber Einfluss auf die Art und Weise, wie du streckst und interpolierst. Danach wäre vom neuen Bild die Größe von SrcRect = DstRect beim Aufruf von TCanvas.DrawBitmap. |
AW: DrawBitmap Pixelated mit Firemonkey unter Android/GPUCanvas
Hmm...
Gibt es da eine Hauseigene Lösung von Firemonkey oder müsste ich das wirklich über Set/GetPixel oder ScanLine machen? :D Mir würde da leider kein anderer Weg in den Sinn kommen... Wäre halt wichtig das es performant genug ist, sonst müsste ich das ohne machen... Finde das irgendwie schade das Firemonkey das nicht so rendert obwohl ich das so gesetzt habe, aber naja :/ Freundliche Grüsse |
AW: DrawBitmap Pixelated mit Firemonkey unter Android/GPUCanvas
Ich hätte beinahe gesagt, dass du TBitmap.CreateThumbnail nutzen kannst, aber das nutzt ja intern auch DoDrawBitmap.
Da stehste dann wieder vor dem gleichen Problem. Eventuell kannst du einfach schon geklotzt die originale Grafik zeichnen? |
AW: DrawBitmap Pixelated mit Firemonkey unter Android/GPUCanvas
Zitat:
Zitat:
Würde leider nicht gehen weil das Echtzeit-Bild berechnet wird ^^ Freundliche Grüsse |
AW: DrawBitmap Pixelated mit Firemonkey unter Android/GPUCanvas
Hier geht's doch um dein Spiel in isometrischer Perspektive, oder?
Du willst doch so eine Retro-Computer-Klötzchengrafik, richtig? In welcher Auflösung generierst du denn dein Originalbild? In welche Zellauflösung soll's denn kopiert werden? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:01 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 by Thomas Breitkreuz