Flexibles BMP/JPEG

MyersGer

Mitglied
Ich habe eine XML-Datei in der verschiedene Gebiete (eine Landkarte) beschrieben sind. So auch der "Besitzer".
Jeder "Besitzer" hat eine eigene Farbe.
Ich habe eine Vorlage als PSD mit verschiedenen Ebenen (eine Ebene pro Land).
Wie kann ich das Umfärben beim Besitzwechsel automatisieren?

Ich möchte nämlich nicht den kompliziertesten Weg nehmen :)

Dass ich das PSD nicht bearbeiten kann oder will, ist schon klar.
Soll ich jede ebene einmal in jeder Farbe abspeichern und dann nachher zu einem Gesamtbild zusammenfassen? Bisschen viel Aufwand und vor allem nicht grade klein.

Soll ich das per DX machen und dann zu einer PictureBox rendern lassen oder ist GDI+ besser dafür geeignet?


Ich hoffe mal, man versteht worum es geht und was ich vorhabe :rolleyes: :)
 
Hallo.

Das einfachste und das schnellste dürfte sein, wenn du die verschiedenen Teile in den verschiedenen Farben speicherst und dann je nach bedarf das Bild zusammen stückelst.
Du könntest zwar auch mittels GDI+ umfärben, aber das ist ziemlich Zeitintensiv (ausser du machst es mit unsafe Code und arbeitest direkt über Pointer mit dem Bild im Speicher)

Wird es ein "Risiko"? :rolleyes:

Wenn du weisst wie es mit DX geht, und es nicht zuviel Aufwand ist, kannst es natürlich auch damit probieren.
Solltest den GDI+ - Weg wählen, solltest du dir die Methoden SetPixel und GetPixel der Graphics-Klasse ansehen.

Mfg,
Alex
 
Sagen wir so: Es IST ein "Risiko" :p

Hm HP-Werbung will ich hier ja nicht machen aber: HP

Das läuft schon seit nem halben Jahr und bisher auch ganz gut mit der Karte. Allerdings hab ich nun Zeit den Teil mit der Karte in Programmcode umzusetzen. Vorher hatte ich eben auch noch andere Sachen zu tun :)
Und weil das ganze nun in mehrere Sparten geteilt wird, lohnt es sich auch das zu machen :)

Wenn ich das in GDI+ machen würde ist die frage, ob die Karte auch so schön aussehen würde. Aber da ich nicht unsafe-code verwenden willm scheidet der Weg dann wohl aus.
Zusammenpuzzlen ist ja auch nicht so gaaanz einfach. ich hätte dann 285 länder * 15 (max. Spieleranzahl) und eine "Schablone".
Schablone = 1 Ebene mit Rändern und Gewässern usw. und dann eine Ebene mit zusammengesetzten Ländern. Wie bekomme ich es dann hin, dass die Ebenen (inkl. der Transparenz - die Lücken für die Länder) übereinander gelegt werden?

Hm ich muss mal lesen, wies da mit DX steht.
 
Gut, bei der Anzahl von Ländern ist es schon etwas aufwändig jedes Land in den verschiedenen Farben als Datei zu speichern, und das dann zsuammen zu stückeln.

Code:
Wenn ich das in GDI+ machen würde ist die frage, ob die Karte auch so schön aussehen würde.
Aber da ich nicht unsafe-code verwenden willm scheidet der Weg dann wohl aus.

Da hast du mich wohl falsch verstanden, (oder ich hab mich blöd ausgedrückt).
Du kannst es schon in GDI+ machen, bei einfachen Farben dürfts auch nicht so schlecht aussehen, allerdings ist es langsam wenn du mit GDI+ jeden Pixel durchgehst.

Schneller wäre es mit unsafe Code bei dem du direkt auf die Daten zugreifen kannst.
 
Zuletzt bearbeitet:
Hm. Am Liebsten wäre mir natürlich ein fertiges Bild zu genererieren dann abzuspeichern und dann wie bisher anzeigen zu lassen. Dann müsst ich die ToolTips nicht in die Anzeige umsetzen.
Na ja man kann nicht alles haben :)

Wegen dem GDI+: Wenn ich die Bereiche füllen würde, bräuchte ich doch eine "saubere" Farbe oder? Im Moment sind ja weiche Übergänge durch einen leichten schwarzen Schatten recht schön gehalten :) Nur bekommt man dadurch ja bsplw. ein "schmutziges" grün an den Rändern.

Sollte ich dann die Ebene mit den Schatten extra nehmen, die Ebene mit den Ländern "aufbereiten" lassen und diese dann zu einem Bild machen lassen?!

Extrem kompliziert :) Aber was ist schon einfach?! ;)


p.s.: Mit DX würde ich ja auch jedes Land extra brauchen in jeder Farbe?! Jeden falls nach meinen bisherigen DX Kenntnissen bräuchte ich das :)
 
Zuletzt bearbeitet:
So, habe schnell ein kleines Programm geschrieben. Es soll verdeutlichen wie du grundsätzlich mit GDI die Farbenersetzen könntest, aber auch wie langsam dieser Vorgang ist.

Das Programm könnte man noch so ausweiten, das die neue Farbe die Schattierung der alten farbe übernimmt, da müsste man halt ein wenig Rechnen.

Wie das mit DX aussieht, kann ich dir leider nicht sagen, da ich mich damit zuwenig beschäftigt habe.

Screenshot:
ImgReplacer.jpg


(Im angehängten Paket ist das Programm und der Sourcecode)
 

Anhänge

  • imgtest.rar
    48,2 KB · Aufrufe: 33
Danke, für das Codebeispiel!

Ich seh, worauf du hinaus willst ;)

Ohne Unsafe-Coding wirds da recht lahm werden. Ich habe bei codeproject.net ein ähnliches Beispiel MIT Unsafe-Code entdeckt und ich muss sagen: da gibts doch nen netten Geschwindigkeitsunterschied :)

Muss ich das wohl unsafe machen. Mal sehen wie ich das dann mit dem Schatten hinbekomme.
 
Ich habe das Programm nun erweitert, es benutzt zwar weiterhin managed Code, jedoch berücksichtigt die jetzige Version die Schattierung.

// Edit: Ich hoffe du hast herausgefunden, dass wenn man auf das Kästchen mit der neue Farbe klickt, auch eine neue Farbe wählen kann.
 

Anhänge

  • imgtest.rar
    50,2 KB · Aufrufe: 24
Zuletzt bearbeitet:
Dank dir nochmal.

Ich werde jetzt versuchen die Felder mit dem Unsafe-Code, wie auf codeproject.net einzufärben und dann danach die Ebene mit Schrift, Gewässern und Schatten darüber legen.

Mal sehen ob ich das hinbekomme. Erstmal brauch die PSD um die Ebenen einzeln zu speichern :) (muss ich mal warten bis der mit der Karte wieder online ist)

Ich meld mich wieder ;)


P.S.: Das mit der Farbe war klar ;) klickt man ja intuitiv drauf :)
 
Danke nochmal.
Hatte mich ja nun für die GDI+ Variante entschieden und es dann mit Pointern gemacht.

Hab gestern dann auch endlich mal die PSD Datei bekommen :D
Dann hab ich ein "Template" draus gemacht und die Schatten werden dann drüber gelegt. (allerdings nicht automatisch, weil jpeg keine Transparenz hat und gif einfach nur sche*sse aussieht ;) )

So siehts dann fertig aus

Kaum n Unterschied zur manuell erstellten Karte, nur dass ich jetzt keine 20MB große Datei in Photoshop öffnen und ewig suchen und klicken muss :D
 
Zurück