Seite 1 von 3
[GDI+] GdipFillRectangle Problem! [gelöst]
Verfasst: 16.03.2018 21:11
von Mijikai
Ich bin gerade dabei eine kleine DLL zu schreiben um auf den
Bildschirm zeichnen zu können.
Leider liefert GdipFillRectangle() ein falsches Ergebnis!
Mein Brush hat als Alpha $FF - also undurchsichtig.
Wenn ich den Brush mit GdipFillEllipse() verwende funktioniert alles
jedoch nicht mit GdipFillRectangle() !?
Hier ein Bild dazu (mit Rect & Ellipse...):
Ist das ein Bug ?

Re: [GDI+] GdipFillRectangle Problem!
Verfasst: 16.03.2018 21:20
von ccode_new
Hallo Mijikai,
was verstehst du unter einem falschen Ergebnis ?
Mijikai hat geschrieben:Leider liefert GdipFillRectangle() ein falsches Ergebnis!
Mein Brush hat als Alpha $FF - also undurchsichtig.
Ich sehe auf dem Bild eine undurchsichtige Ellipse und auch ein undurchsichtiges Rechteck.
Ich glaube für die Problemlösung sind mehr Informationen (z.B. Code) notwendig.
Re: [GDI+] GdipFillRectangle Problem!
Verfasst: 16.03.2018 21:28
von Mijikai
ccode_new hat geschrieben:
Ich sehe auf dem Bild eine undurchsichtige Ellipse und auch ein undurchsichtiges Rechteck.
Das Rechteck ist Transparent die Ellipse nicht - beide sollten undurchsichtig sein.
(Man sieht das Fenster unter dem Rechteck.)
Der Aufruf erfolgt mit dem gleichen Brush deshalbt sollte das Ergebnis identisch sein
was Farbe & Alphakanal belangt.
Re: [GDI+] GdipFillRectangle Problem!
Verfasst: 16.03.2018 21:35
von ccode_new
Ich brauche mal ein bisschen mehr Code.
Wie ist den die genaue Zeichenreihenfolge und wie übergibst du die gesamten Parameter ?
Re: [GDI+] GdipFillRectangle Problem! [gelöst]
Verfasst: 16.03.2018 22:06
von Mijikai
Nach etwas Recherche -> es ist ein Bug!
Beste Lösung: Alpha -> $FE
Re: [GDI+] GdipFillRectangle Problem! [gelöst]
Verfasst: 16.03.2018 22:30
von ccode_new
Und wie sieht die Ausgabe dann mit $FE aus ?
Was für eine "gdiplus.lib" ist das eigentlich ?
...und wozu machst du es dir so schwer um ein paar Formen mit Transparenzen zu zeichnen ?
Fragen über Fragen.
...
Ich habe mal ein wenig recherchiert
"Wenn du Rechtecke im rechten Winkel zeichnest, beschleunigt GDI+ die Geschwindigkeit, indem es dies schneller als andere Zeichungen zeichnet. Diese Technik wird Bitbliting genannt. Das ist eigentlich ziemlich clever, da es der schnellste Weg ist, Rechtecke auf einer Oberfläche zu zeichnen. Die zu zeichnenden Rechtecke müssen jedoch die Regel erfüllen, dass sie rechtwinklig sind.
Diese clevere Optimierung wurde gemacht, bevor es DWM, Aero, Glass und all die neuen Ideen gab.
Intern kopiert Bitblitting nur die RGBA-Farbdaten von Pixeln aus einem Speicherbereich in einen Anderen (sozusagen von der Zeichnung auf deinem Fenster). Leider ist das RGB-Format, das es schreibt, nicht mit Glasflächen kompatibel, was zu den seltsamen Transparenzeffekten führt, die du beobachtet hast."
.......
Du könntest als Lösung auch "FillPolygon" verwenden.
Re: [GDI+] GdipFillRectangle Problem! [gelöst]
Verfasst: 16.03.2018 22:49
von Mijikai
ccode_new hat geschrieben:Und wie sieht die Ausgabe dann mit $FE aus ?
Was für eine "gdiplus.lib" ist das eigentlich ?
...und wozu machst du es dir so schwer um ein paar Formen mit Transparenzen zu zeichnen ?
Fragen über Fragen.
Mit Alpha $FE:
Die *.lib war bei VisualStudio dabei.
Warum schwer ?
Edit:
Danke für den Typ mit den Polygonen werd ich ausprobieren

Re: [GDI+] GdipFillRectangle Problem! [gelöst]
Verfasst: 16.03.2018 23:05
von ccode_new
Warum schwer ?
Wenn einfach einfach einfach wäre, wäre es auch zu einfach.
Mit Puri kann man das ja leider auch viel zu einfach anders lösen.
Re: [GDI+] GdipFillRectangle Problem! [gelöst]
Verfasst: 16.03.2018 23:07
von Mijikai
ccode_new hat geschrieben:Warum schwer ?
...Mit Puri kann man das ja leider auch viel zu einfach anders lösen.
Ich verstehe nicht was du meinst ?
Wie einfacher ?
Re: [GDI+] GdipFillRectangle Problem! [gelöst]
Verfasst: 16.03.2018 23:11
von ccode_new
Was genau willst du erreichen, weswegen du diese "gdiplus.lib" nutzen möchtest ?
Außerdem scheint diese Lib (dll) auch schon ziemlich Alt ist auch lediglich in einer 32bit Version verfügbar.