PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : GDI: weiße Kanten an gekachelten Bildern verhindern


PatkIllA
2009-11-25, 18:42:32
Ich muss mit GDI eine gekachelte Karte aus rechteckigen Bildern (gif, jpg, tif...) auf den Bildschirm bringen.
Allerdings entsteht besonders bei gedrehter Karte schon mal mehr oder weniger sichtbare weiße Linien an den Kanten. Die Ursache ist schon klar, aber wie behebt man das am besten.

Alle Kacheln vorher unskaliert und unrotiert auf ein Bild zu rendern fällt aus Speicher und Architekturgründen raus.
An das Bild der Nachbarkachel komme ich ohne große Änderungen nicht heran.

Neomi
2009-11-25, 19:23:10
Wenn du von Norden nach Süden und Westen nach Osten zeichnest, könntest du jede Kachel im Osten und Süden um einen Pixel vergrößern. Darein kommen einfach Kopien der ursprünglich letzten Spalte bzw. Zeile. Gezeichnet wird dann leicht überlappend, so daß im Normalfall die zusätzlichen Pixel durch die weiteren Kacheln überdeckt werden. Dadurch sollten die Gaps recht effektiv vermieden werden.

Alternative: Die komplette Karte in ein großes Bild zu rendern, kommt ja nicht in Frage, aber wie sieht es mit einem Kartenausschnitt aus? Du könntest dann die Eckpunkte des Fensters in die Karte projezieren, darum eine Boundingbox bilden und das Ergebnis rotiert auf den Schirm bringen. Skalierung ist etwas schwieriger in dem Fall. Wenn du zu den Kacheln eine Hierarchie hast (also 4 Kacheln à 256x256 werden zu einer verschmolzen, die dann wieder auf 256x256 geschrumpft wird), benötigst du maximal das doppelte der Fensterdiagonale plus einen kleinen Sicherheitsrand, das dann als Breite und Höhe.

PatkIllA
2009-11-25, 20:14:00
Die Kacheln kommen erst aus der Mitte, da die potentiell interessanter sind als die außen.
Die Reihenfolge ist wegen multithreading laden nicht unbedingt deterministisch. Außerdem muss das Gitter nicht voll besetzt sein.
Es würde wahrscheinlich reichen, wenn am Rand nicht mit dem weißen Hintergrund überblendet wird.

edit:
muss ich mal hiermit spielen
http://msdn.microsoft.com/en-us/library/system.drawing.graphics.compositingmode.aspx