Ich machte einen 2d Map Editor für mein quadratisches Kacheln Platformer Spiel, als ich erkannte, dass ich wirklich einen Bildeditor mit seinen Fähigkeiten benutzen konnte, benachbarte Pixel und viele mehr neu zu streichen, also dachte ich, ich sollte versuchen, ein gemaltes Level zu lesen App, die es dann in ein Leichtgewicht Format umwandeln wird.Wie kann ich Bildpixelwerte als RGB in 2D-Array lesen?
Ich bin mir nicht sicher, ob die Verwendung eines Bitmap-Formats für so etwas erforderlich ist, aber ich denke, das Lesen eines bestimmten Pixels wäre einfacher als beispielsweise mit PNG.
Also mein Ziel ist es, ein Bild zu öffnen, durch jedes Pixel zu iterieren, nach den Farben zu suchen, die zu meinem Kachelschema passen, und entsprechende Kacheln in das Array von Blöcken zu legen.
Hinweis: Ich habe bereits mein Lightweight-Format, also brauche ich nur Pixelwerte in Array zu lesen.
Lösung: Meine Skizze sieht wie folgt aus:
Bitmap myBitmap = new Bitmap(@"input.png");
for (int x = 0; x < myBitmap.Width; x++)
{
for (int y = 0; y < myBitmap.Height; y++)
{
Color pixelColor = myBitmap.GetPixel(x, y);
// things we do with pixelColor
}
}
Beispiel 2:
Bitmap myBitmap = new Bitmap(@"input.png");
for (int x = 0; x < myBitmap.Width; x++)
{
for (int y = 0; y < myBitmap.Height; y++)
{
// Get the color of a pixel within myBitmap.
Color pixelColor = myBitmap.GetPixel(x, y);
string pixelColorStringValue =
pixelColor.R.ToString("D3") + " " +
pixelColor.G.ToString("D3") + " " +
pixelColor.B.ToString("D3") + ", ";
switch (pixelColorStringValue)
{
case "255 255 255":
{
// white pixel
break;
}
case "000 000 000":
{
// black pixel
break;
}
}
}
}
Randnotiz: Schalter/Fall auf Strings hat keinen Wert. Intern ist es nur String-Vergleiche. Der Vergleich der tatsächlichen RGB-Werte ist zwangsläufig effizienter. – Nyerguds
@ Nyerguds das war vor Jahren, also erinnere ich mich nicht, warum ich es so gemacht habe. Ich bin sicher, es gibt einen viel besseren Weg, um alles in dieser Frage zu tun, und wenn ich heute das Problem lösen müsste, das ich heute hatte, wäre der Code völlig anders. – user1306322
Hehe. Das ist die Art und Weise, wie es normalerweise aussieht, wenn ich auf alten Code zurückschaue, denke ich :) – Nyerguds