AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

canvas.rectangle transparent?

Ein Thema von Mattze · begonnen am 28. Apr 2016 · letzter Beitrag vom 29. Apr 2016
 
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.487 Beiträge
 
Delphi 12 Athens
 
#18

AW: canvas.rectangle transparent?

  Alt 29. Apr 2016, 16:29
Hallo,

Ich glaube hier besteht noch Informationsbedarf, was den ein Canvas eigentlich ist.
Der Canvas repräsentiert ein reines Ausgabegerät, das mit Zeichenbefehlen gesteuert wird.
Das heißt das nachträgliche Lesen von dem was ausgegeben wurde, ist eigentlich nicht vorgesehen.
Ein Beispiel wäre ein Plotter, der jeden Zeichenbefehl sofort in Stiftbewegungen umsetzt.

Die Grafikkarte hat natürlich eigenen Speicher, in dem das Ergebnis der Zeichenbefehle vor der Ausgabe zwischengespeichert wird.
Aber dieser Speicher muss nicht direkt vom Hauptprozessor erreichbar sein. Die Zeichenbefehle können auch von Prozessoren auf der Grafikkarte ausgeführt werden.
Selbst wenn die Grafikkarte die Möglichkeit hat, Teile ihres Speichers in der Adressraum des Hauptprozessors einzublenden,
so sind das Adressbereiche auf die nur der Grafikkartentreiber zugreifen kann.

Um trotzdem die Möglichkeit zu haben auf den Grafikspeichers zuzugreifen, wurden geräteabhängige Bitmap geschaffen.
Mit der BitBlt-Funktion können Teile des Grafikspeichers in diese Bitmaps und von dort wieder zurück kopiert werden.

Allerdings liegen die Daten dort in einem Format vor, daß der Grafiktreiber bestimmt.
Für Zeichenbefehle auf diese Bitmaps kann ein gerätekompatiblen Speichercancvas erzeugt werden.

Um die Daten direkt im Speicher bearbeiten zu können, muss diese erst in ein geräteunabhängiges Standardformat überführt werden.
Für diese Formate ist genau definiert wie die Daten im Speicher abgelegt sind.

Im Format pf24Bit werden für jedes Pixel 3 Byte abgelegt, jedes Byte steht für einen Farbanteil in der Reihenfolge Blau, Grün, Rot.
Delphi-Quellcode:
type
  TBGR =
    B: Byte;
    G: Byte;
    R: Byte;
  end;
Im Gegensatz dazu können in TColor RGB-Werte gespeichert werden, das heißt Blau und Rot sind in der Reihenfolge getauscht.

Um auf das Problem zurück zu kommmen, mir scheint die beste Lösung zu sein:
- Bitmap der entsprechenden Größe erzeugen
- den Bildauschnitt kopieren
- Bitmap verändern
- Bitmap wieder auf den ursprüngliche Canvas zeichnen

Wie ich sehe ist das auch deine Lösung.
  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 12:38 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