Forum: PC-Programmierung C# PNG Sammlung (ausschneiden einzelner?)


von Stephan (Gast)


Angehängte Dateien:

Lesenswert?

Hi,

ich probiere mich gerade erstmals an C#, eine alte Version 2010.
Ich habe mir die VS2010ImageLibrary nachträglich entpackt und versuche 
nun damit klar zu kommen. Aber ich finde irgend wie kein Hilfe.....

Bei MSN geht das irgend wann ins leere.... :-(

Ich hab hier ein PNG das mehrere Bilder(Icons) enthält und weiß nicht 
wie ich an die einzelnen Bilder komme. Da mir die Größen-infos fehlen, 
kann ich nicht einfach cut 20, 20 machen!!!!

Unter C++ hatte ich mal eine Vorlage, wo ich die Größen kannte, war kein 
Problem, auch eine Vorlage mit einem Rahmen um die einzelnen Pics, 
konnte ich in C++ verarbeiten(Rahmen Pixel suchen).

Aber hier weiß ich einfach nicht weiter!?!
(Fehlendes Wissen von C#!)

Ich Hänge mal ein PNG an, vielleicht kann mir einer einen Hinweis geben.
Link wäre Ok. :-)

von ~fufu (Gast)


Lesenswert?

Stephan schrieb:
> Da mir die Größen-infos fehlen,
> kann ich nicht einfach cut 20, 20 machen!!!!

Fehlen dir die Koordinaten der Einzelbilder im gezeigten Bild oder 
verstehst du nicht, wie du mit C# einen Bildausschnitt kopierst? Mir ist 
dein Problem noch nicht ganz klar.

von Stephan (Gast)


Lesenswert?

Den Bildausschnitt sollte ich hin bekommen. (hab da ein Beispiel 
gefunden)
Aber die Koordinaten fehlen mir. Wie komme ich an diese?

von Stephan (Gast)


Lesenswert?

Ahh noch was:
An meine Installation sind scheinbar Sachen schief gelaufen, denn ich 
hab kein Namespace "System.Windows.Controls" wie kann man das 
reparieren?

ich nutze ".NET Framework 4"!

von Stephan (Gast)


Lesenswert?

"System.Windows.Shapes" habe ich auch nicht!!!

Kann mir jemand erklären wie man die hilfe von 
"https://msdn.microsoft.com/de-de/library/"; richtig benutzt???!!!!!

Das ich das Framework 4 einstellen muß, weiß ich schon :-)
(sonst kommt 4.5 oder 4.6)

Aber trotz der Version 4, stehen dort Sachen die ich nicht nutzen kann.

Ist die Version 2010 nicht mehr so gut für einen Anfänger?
(wollte noch C++ in der Hinterhand haben, gibs bei den neueren Versionen 
nicht mehr!)

von Philipp K. (philipp_k59)


Lesenswert?

Sind alle Bilder so Multiple aufgebaut oder sind das zig verschiedene 
Verwürfelungen?

Komischerweise sind die Bilder Oberkanten ungefähr 49-50px voneinander 
entfernt.. wenn Du von oben mit 49px anfängst landet jedes Bild in der 
Mitte.

von Borislav B. (boris_b)


Lesenswert?

Liegt das Problem ggf. etwas tiefer?

Was willst du eigentlich mit den Bildern machen? Sind die für dein User 
Interface?
Falls ja, machst du dir das leben unnötig schwer ;-)

Ach ja:
Nutzt du Winforms, WPF oder Silverlight?

von Stephan (Gast)


Lesenswert?

Hallo

@Philipp K.
Also alles durch einander, leider.

@Boris P.
Wie gesagt, hab gestern mit ca. 12 Stunden mit C# angefangen.
(bis 2.30 Uhr) Aber ich komme gar nicht auf einen grünen Zweig.
Ich wollte paar Bilder(Icons) für meine Anwendung haben und fand das.
(VS2010ImageLibrary) hab mir auch die VS2012ImageLibrary + 
VS2013ImageLibrary
vom Windows-Download Server geholt, mal sehen was darin ist. War gestern 
schon zu spät.

Wie gehts einfacher?
Also ich benutze "Windows Forms Appl.", scheint ähnlich zum VC++ 6 von 
Borland zu sein. (darin war ich mal sehr gut)
Was ist stand der Dinge? WPF?
(Hier mein Test PC hat noch XP drauf! <- muß auch bleiben)

Wegen den Bildern, kann ich hier auch die Pixel durchsuchen nach != 
TranparentColor oder so????

von Borislav B. (boris_b)


Angehängte Dateien:

Lesenswert?

Aaaalso:
Kannst ruhig WinForms nehmen, das ist erst mal einfacher als WPF.
Aber mit solchen komischen Grafiken musst du dich nicht rumärgern ;-)

Üblicherweise sind die UI Grafiken einfache, kleine PNGs, die direkt die 
richtige Größe haben. Da muss dann nichts mehr durchsucht/ausgeschnitten 
werden. In der VS2013 Image Library findest du davon reichlich (Beispiel 
siehe oben). Wenn dir der Grafikstil nicht gefällt, kannst du natürlich 
auch eine der älternen VS Image Libraries nehmen...

Die kannst du einfach deinem Projekt als Resource hinzufügen.
Im Designer kannst du diese dann nach Belieben verwenden (an 
Menüeinträgen, Buttons etc.).

: Bearbeitet durch User
von R. Rebentrost (Gast)


Lesenswert?

Stephan schrieb:
> (wollte noch C++ in der Hinterhand haben, gibs bei den neueren Versionen
> nicht mehr!)

Das stimmt nicht.

von Stephan (Gast)


Lesenswert?

Danke.
So kannte ich das von Früher auch.
Ein Set hatte ich damals für Enabled Icons und eins für Disabled Icons.
Meistens hatten die 32x32 Pixel.


Aber hat denn MSN nicht mit gedacht oder stelle ich mich einfach nur an.
Die haben so viele Icons freigegeben(2013 > 290MB, 2010 ~16MB), aber 
geben kein Code zur Benutzung der Icons????


Hab mal schnell einen Blick in die Zusammenstellung von 2013 angesehen, 
das könnte besser aussehen.

Wäre aber an der Lösung des oberen Problems weiter interessiert!
Biiittttteeee :-X


Danke.

von Stephan (Gast)


Lesenswert?

@R. Rebentrost
Aha was verpasst. Super.
Sagst du mir auch wie es jetzt aussieht.
Mir wart so als hätte ich das mal so gelesen......

von Borislav B. (boris_b)


Lesenswert?

Stephan schrieb:
> Wäre aber an der Lösung des oberen Problems weiter interessiert!
> Biiittttteeee :-X

Welches Problem denn jetzt konkret?

Stephan schrieb:
> Ein Set hatte ich damals für Enabled Icons und eins für Disabled Icons.

Das brauchst du übrigens nicht. Die disabled-Icons werde automatisch 
ausgegraut.

Stephan schrieb:
> Aber hat denn MSN nicht mit gedacht oder stelle ich mich einfach nur an.
> Die haben so viele Icons freigegeben(2013 > 290MB, 2010 ~16MB), aber
> geben kein Code zur Benutzung der Icons????

Du brauchst KEINEN Code zur Benutzung der Icons. Wie kommst du darauf?
Ich habe ja oben geschrieben, wie es geht.

von Stephan (Gast)


Angehängte Dateien:

Lesenswert?

@Boris P.
Bin noch ziemlich müde, einfach zu alt, um die Nacht durch zu machen.

Boris P. schrieb:
> Stephan schrieb:
>> Ein Set hatte ich damals für Enabled Icons und eins für Disabled Icons.
>
> Das brauchst du übrigens nicht. Die disabled-Icons werde automatisch
> ausgegraut.

Super schon mal ein Problem weniger.

Boris P. schrieb:
> Stephan schrieb:
>> Wäre aber an der Lösung des oberen Problems weiter interessiert!
>> Biiittttteeee :-X
>
> Welches Problem denn jetzt konkret?

Wie ich versucht hatte es oben zu beschreiben.
Wie bekommt man die EINZELNEN ICONS aus dem SET????
Dazu muss es doch einen 3 Zeiler oder so geben:
- Lade Icon-Set
- Erkenne Transparente Farbe und echte Farbe
- Kalkuliere die Größe der einzelnen Icons
- Erstelle eine ImageList und befülle diese mit den AUSGESCHNITTEN ICONS
- Have FUN

Ok, bin Anfänger -> sind 5 Zeile geworden.

Du hast mir eine Alternative genannt, die ich jetzt auch Nutze. Danke.
Nicht die Lösung zu meiner Frage.

Das Einzel-Icon benutze ich jetzt.(Anhang von: 'Visual Studio 2013 Image 
Library\2010_VS Icon Legacy\Icons - VS2010')

von R. Rebentrost (Gast)


Lesenswert?

Stephan schrieb:

>> wollte noch C++ in der Hinterhand haben, gibs bei den neueren
>> Versionen nicht mehr!

> Mir wart so als hätte ich das mal so gelesen......

Zur Debatte stand mal, ob es weiterhin Visual Studio kostenlos zur 
Erstellung von Desktopanwendungen geben soll. War aber nur ein Hirnfurz, 
hat sich erledigt und ist, nachdem sich Mr. Steve "Monkey boy" Ballmer 
abgeseilt hat, mit der Community-Edition quasi ins Gegenteil gekippt: 
Die Features der Pro-Version gibt es nun für die meisten Anwender 
umsonst.

> Also ich benutze "Windows Forms Appl.", scheint ähnlich zum VC++ 6 von
> Borland zu sein. (darin war ich mal sehr gut)

VC++ von Borland? Wäre mir neu ...

BTW: Ich würde dir nicht empfehlen, nun C++ zu verwenden, nur weil es 
geht. Nicht wegen der Sprache, sondern weil du ein Winodws-GUI mit C# 
(und Windows Forms oder WPF) einfacher zusammenbekommst. Mit C++ 
müsstest du MFC, ATL, Qt, wxWidgets, Win32++ o.ä. verwenden oder eben 
den C-Weg gehen. C++/CLI möchte ich als Option mal weglassen.

von Stephan (Gast)


Lesenswert?

Für die Leute die es interessiert hier der Link zu den Visual Studio 
Image Librarys von MS.

https://www.microsoft.com/en-us/download/details.aspx?id=35825

von Rolf Magnus (Gast)


Lesenswert?

Stephan schrieb:
> Wie ich versucht hatte es oben zu beschreiben.
> Wie bekommt man die EINZELNEN ICONS aus dem SET????

Das ist kein Icon-Set, sondern ein Preview der Icons zur Einbettung in 
eine Webseite oder so. Wenn man stattdessen das echte Icon benutzt, ist 
das sicher deutlich einfacher. Dann muß man sich auch keine Heuristik 
ausdenken, um das zu tun:

Stephan schrieb:
> - Erkenne Transparente Farbe und echte Farbe
> - Kalkuliere die Größe der einzelnen Icons

von Stephan (Gast)


Lesenswert?

@R. Rebentrost
Danke für die Info.

R. Rebentrost schrieb:
> VC++ von Borland? Wäre mir neu ...

neeee alt! :-D
C++Builder 6 von Borland. War auch schon mit zusammen Klicken einer App.
(Visual Component Library (VCL) )

von Stephan (Gast)


Angehängte Dateien:

Lesenswert?

Rolf Magnus schrieb:
> Dann muß man sich auch keine Heuristik
> ausdenken

Normalerweise arbeitet man mit dem Graphiker zusammen oder gibt den 
Aufbau der Sets selber vor.

Das Ausdenken kam von mir, da MS es nicht geschafft hat, ein 
vernünftiges Beispiel zu liefern. Die werden Ihre Regeln zur Erstellung 
solcher Sets schon haben.

Aber echt mal hat noch nie einer mit diesen Sets gearbeitet???
Diese Art der Anordnung von Graphiken ist doch nicht neu, mir fallen 10 
Spiele auf Anhieb ein die das System Benutzen.
Eins ist zum Beispiel Freeciv:
Hier werden die Gebäude, Einheiten und andere Sachen so aufbereitet.
Die Leute werden sich aber unter einander, bestimmt verständigt haben 
und den Aufbau Ihrer Graphiken kennen.
Ich hänge mal eins an(Admin: wenn nicht gewünscht bitte löschen, müsste 
aber Ok sein)!

hier sind die einzelnen Bilder durch einen Rahmen getrennt, da kann man 
einfach die Größe ermitteln.

von Arc N. (arc)


Lesenswert?

Stephan schrieb:
> "System.Windows.Shapes" habe ich auch nicht!!!

System.Windows.Controls und ...Shapes gehören zum WPF, wenn die 
Anwendung auf WinForms basiert, sind die normalerweise nicht 
referenziert.
Wenn's sein muss, könnten WPF-Sachen allerdings eingebunden werden:
https://msdn.microsoft.com/de-de/library/ms742215%28v=vs.110%29.aspx

> Ist die Version 2010 nicht mehr so gut für einen Anfänger?
> (wollte noch C++ in der Hinterhand haben, gibs bei den neueren Versionen
> nicht mehr!)

Die erwähnte Community-Edition nehmen
https://www.visualstudio.com/en-us/products/visual-studio-community-vs.aspx
ansonsten ginge C++ auch mit Express-Editionen, allerdings ohne MFC etc.

Stephan schrieb:
> Das Ausdenken kam von mir, da MS es nicht geschafft hat, ein
> vernünftiges Beispiel zu liefern. Die werden Ihre Regeln zur Erstellung
> solcher Sets schon haben.

Wo ist das Problem? Die Standard-Icons sind jeweils in den 
ICO-Unterordnern und können, ebenso wie die ganzen PNGs, direkt in einem 
Programm verwendet werden.

https://msdn.microsoft.com/en-us/library/7k989cfy%28v=vs.90%29.aspx

von Stephan (Gast)


Lesenswert?

Arc Net schrieb:
> System.Windows.Controls und ...Shapes gehören zum WPF, wenn die
> Anwendung auf WinForms basiert, sind die normalerweise nicht
> referenziert.

Danke.
Wieder was gelernt. Doch wo finde ich solch WICHTIGE Info.
Bevor ich die Icons verwenden konnte wollte ich einen Kreis als 
Bild-Ersatz malen und da wurde mir Ellipse aus "Shapes" vorgeschlagen. 
Hatte mich schon gefreut das es so einfach gehen sollte. Aber es kommt 
anders als man denkt. :-(

Kann ich in der Doku das irgendwie erkennen was zu WinForms gehört und 
was nicht?

Arc Net schrieb:
> Wenn's sein muss, könnten WPF-Sachen allerdings eingebunden werden:

nein Danke, nicht noch komplizierte als es schon ist.

Arc Net schrieb:
> Wo ist das Problem?

Ich kann schon Bilder in das Projekt legen(embeded rec.) und laden.
Ich kann Sachen ausschneiden und weiter verarbeiten. Nur ein normales 
Problem. ABER was ich NICHT kann, ist mir die EINZEL BILDER aus dem 
GANZEN zu kopieren, ohne ein PIXEL Zähl-Orgie anzustellen.

so wie auch Philipp K. schrieb:
> Komischerweise sind die Bilder Oberkanten ungefähr 49-50px voneinander
> entfernt.. wenn Du von oben mit 49px anfängst landet jedes Bild in der
> Mitte.

von Stephan (Gast)


Lesenswert?

Danke nochmal an alle die mir geholfen haben.
DANKE


Aber zurück zum Thema:
IST ES MÖGLICH, mit C# Boardmitteln, EINZEL-BILDER aus einer 
'BILDER-SAMMMLUNG' aus zuschneiden, dessen GRÖßE ich NICHT kenne ????
Die EINZEL-BILDER sind mit einer 'TRANSPARENT'-Farbe von einander 
getrennt!
(siehe Anhang 1. Post)

Wenn ich der Erste bin der das versucht, ok, ich will es nur wissen.
ICH will hier keinen Programmierwettbewerb oder einen Blumentopf 
gewinnen.

Ich habe mit der 'VS2013 Image Library' und der Hilfe von Boris eine 
Alternative gefunden und kann mit dem Misserfolg auf mein Frage leben.
Eine Antwort hätte ich gerne.

mfg
Stephan

von R. Rebentrost (Gast)


Lesenswert?

Stephan schrieb:
> Kann ich in der Doku das irgendwie erkennen was zu WinForms gehört und
> was nicht?

Klar. Auf irgendeinen Typnamen klicken, z.B. hier AccessText, Button 
oder sonst etwas:

https://msdn.microsoft.com/de-de/library/system.windows.controls%28v=vs.100%29.aspx

PresentationFramework -> WPF
System.Windows.Forms -> Windows Forms

https://msdn.microsoft.com/de-de/library/system.windows.forms%28v=vs.100%29.aspx

> Aber zurück zum Thema:
> IST ES MÖGLICH, mit C# Boardmitteln, EINZEL-BILDER aus einer
> 'BILDER-SAMMMLUNG' aus zuschneiden, dessen GRÖßE ich NICHT kenne ????
> Die EINZEL-BILDER sind mit einer 'TRANSPARENT'-Farbe von einander
> getrennt!

Eine fertige Methode, die selbstständig Icons in einem "Icon-Atlas" 
erkennt, gibt es im .NET-Framework nicht. Bei komplexen Icons, die aus 
mehreren voneinander getrennten Teilbereichen bestehen und relativ nah 
zusammen stehen, ist das nicht ganz trivial (in manchen Fällen sogar 
unmöglich). Das wäre auch etwas zu viel verlangt und gehört nicht per se 
in eine allgemeine UI-Bibliothek.

> IST ES MÖGLICH, mit C# Boardmitteln, EINZEL-BILDER aus einer
> 'BILDER-SAMMMLUNG' aus zuschneiden, dessen GRÖßE ich NICHT kenne ????

Bei deinem Original-Beispielbild: Sicher, du musst bloß die Pixel 
auslesen und die Abstände analysieren.
http://csharpexamples.com/fast-image-processing-c/

Vielleicht würde es auch helfen, die Gemeinsamkeiten herauszufinden 
(Abstände von Icon-Mitte zu Icon-Mitte etc.) und dann, falls sinnvoll, 
die entsprechenden Werte für alle "Multi-Icon-PNGs" zu benutzen. Die 
Größen und Abstände werden ja nicht von Datei zu Datei unterschiedlich 
und zufällig sein?

> Diese Art der Anordnung von Graphiken ist doch nicht neu, mir fallen 10
> Spiele auf Anhieb ein die das System Benutzen.

Das stimmt, sehr viele Spiele verwenden Textur-Atlanten zum Zweck der 
Organisation und nicht zuletzt auch der Effizienz (die Dinger werden 
komplett in den Grafikspeicher geladen).

http://www.gamasutra.com/features/20060126/figure1.jpg?iact=rc&uact=3&dur=68&page=1&start=0&ndsp=32&ved=0CCEQrQMwAGoVChMInbnlnvyRxgIVQhAsCh186w0Z

http://payload198.cargocollective.com/1/8/282980/6261889/texture_desertTown.jpg

Aber darin sind die Größen der Teilbilder entweder identisch oder es 
gibt jeweils eine kleine Datei dazu, in der die Positionen und Größen 
der Teilbilder/Texturen stehen (diese "Sidecar-Dateien" werden von den 
entsprechenden Tools gleich mit erzeugt).

von R. Rebentrost (Gast)


Lesenswert?

Nachtrag:

R. Rebentrost schrieb:
> Bei deinem Original-Beispielbild: Sicher, du musst bloß die Pixel
> auslesen und die Abstände analysieren.

Oder einfach bei einer leeren Zeile (Zeile komplett mit A = 0) davon 
ausgehen, dass das Ende des jeweiligen Icons erreicht ist. Das 
funktioniert aber nur bei Icons ohne "vertikale Lücken"; darum der 
Vorschlag mit den Abständen.

von Arc N. (arc)


Lesenswert?

Stephan schrieb:
> Danke nochmal an alle die mir geholfen haben.
> *DANKE*
>
>
> Aber zurück zum Thema:
> IST ES MÖGLICH, mit C# Boardmitteln, EINZEL-BILDER aus einer
> 'BILDER-SAMMMLUNG' aus zuschneiden, dessen GRÖßE ich NICHT kenne ????
> Die EINZEL-BILDER sind mit einer 'TRANSPARENT'-Farbe von einander
> getrennt!
> (siehe Anhang 1. Post)

Wozu? Das sind normale Icons.
Beispiel: Auf einer Form einen ToolStrip hinzufügen, zum Testen mal 
rechtsklicken und Insert Standard Items machen, dann einen neuen Button 
hinzufügen. Dann Properties -> Image anklicken -> Local Resource -> 
Import -> jetzt, da es nicht direkt angeboten wird, als Dateifilter *.* 
und ein beliebiges .ico öffnen.
ImageScalingSize des ToolStrips auf 32x32 und zum Update einmal AutoSize 
auf false und dann wieder auf true setzen.
Ergebnis: Die Standard-Bilder skalieren nicht mit, die .ico-Icons aus 
der Sammlung dagegen schon.

Anderes Beispiel:
Icon ist in den Resourcen des Programs: Dann in einer Methode z.B.
Icon testIcon =  new Icon(Properties.Resources.DerVergebeneName, 64, 
64);

https://msdn.microsoft.com/de-de/library/System.Drawing.Icon.Icon(v=vs.110).aspx

https://msdn.microsoft.com/de-de/library/system.drawing.icon_methods(v=vs.110).aspx
dort z.B. ToBitmap und die Bitmap-Save-Methoden sollten das Icon in der 
passenden Größe extrahieren.
Ansonsten ist Win32-Api angesagt:
https://msdn.microsoft.com/en-us/library/ms648050%28VS.85%29.aspx
https://msdn.microsoft.com/en-us/library/ms648069%28v=vs.85%29.aspx

von bluppdidupp (Gast)


Lesenswert?

1) png als Bitmap öffnen (z.B. per Bitmap.FromFile("tileset.png"))
2) mit Schleifen über Bitmap.GetPixel() drüber gehen und die Ränder 
suchen
3) Gefundene Teilbilder ('Tile') per Graphics.DrawImage() in neu 
erzeugte Bitmaps passender Größe kopieren

>dessen GRÖßE ich NICHT kenne
...ist allerdings eher unüblich.
Speziell bei Spielen speichert man sich die Abmessungen/Aufbau der 
Tilesets eigentlich irgendwie mit oder sie sind generell fix. Man 
erzeugt aus dem Tileset dann auch keine einzelnen Bitmaps, sondern 
zeichnet direkt den entsprechenden Tile aus dem Tileset an die 
gewünschte Stelle (z.B. mittels 
https://msdn.microsoft.com/de-de/library/ms142040.aspx)

Für 1-zeilige Tilesets mit fixer Tilesize kann man auch auf eine 
ImageList zurückgreifen: 
https://msdn.microsoft.com/de-de/library/system.windows.forms.imagelist.imagecollection.addstrip(v=vs.110).aspx

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.