Dies ist eine seltsame Frage, für die ich Schwierigkeiten hatte, einen Titel zu schreiben.Ein Algorithmus zum Iterieren über einen rechteckigen Bereich innerhalb eines 1-dimensionalen Arrays (Bitmapping)
Ich arbeite mit Pixeln (Bitmaps, genauer gesagt) und kann die (einfache) Mathematik für den pragmatischen Zugriff auf jede Array-Zelle nicht herausfinden.
Meine Leinwand ist [n16 x 16] Pixel, n ist immer 1 oder größer.
Hier ist ein Foto von einem Grunde n = 2 Leinwand:
http://i.imgur.com/mabwQfJ.png
Was ich mein magischer Algorithmus will, ist 0-495 laufen zu tun, ohne dann, dass leichtere Grauzone zu berühren gehe von 16 zu 512 (was eigentlich Zelle 511 ist, mein Schlechter), ohne den dunkelgrauen Bereich zu berühren.
So, 0-15, fahren 16 bis 31, gefolgt von 32 bis 47 usw.
Und für n = 3:
http://i.imgur.com/TqJMWl6.png
In diesem Fall ist es wäre 0-735, die helleren grauen Bereiche überspringend, 16-751 die Bereiche auf jeder Seite überspringend und 32-767 die dunkleren grauen Bereiche überspringend.
Was ich versucht:
ein Auszug aus meinem Code Hier ist, hoffentlich ist es sinnvoll und zeigt, was ich schon versucht. Es ist der Teil, der den Wert für "idxpos" ermittelt.
// Let's say length = 3 for now.
for (int character = 0; character < length; ++character)
{
// in case you're wondering, it grabs 16x16 characters from an ASCII spritesheet
charpos = (string[character] - ' ') * 16 * 16;
// Runs through the spritesheet character map
// this is a huge 16x1520 bitmap.
for (int pixel = 0; pixel < 16 * 16; ++pixel)
{
// ignore this, just me messing around with pixel tinting
r = (((CharMap[charpos + pixel] >> 0) & 0xFF) + 255 - u);
g = (((CharMap[charpos + pixel] >> 8) & 0xFF) + 255 - v);
b = (((CharMap[charpos + pixel] >> 16) & 0xFF) + 255 - w);
newcolour = RGB(r, g, b);
// THIS is the part I am stuck on:
idxpos = pixel + (character * 16 * 16);
bitmap[idxpos] = CharMap[charpos + j];
}
}
Sie bekommen wahrscheinlich die Idee. Es klingt für mich einfach tot, aber ich kann es nicht herausfinden.
Oh, und ich bin nicht an einer magischen Bibliothek interessiert, die all meine Bitmap-Sachen für mich verarbeiten kann, ich bin nicht in einer Position, in der ich eine verwenden kann.
immer den Bereich iteriert für jedes Sprite machen [0, 496) ausschließlich: row = i/16; Spalte = i% 16; gray_index = row * total_number_of_columns + current_gray * 16 + Spalte; –
Ich kann das nicht verstehen "In diesem Fall würde 0-735 die helleren grauen Bereiche überspringen, 16-751 die Bereiche auf jeder Seite überspringen und 32-767 die dunkleren grauen Bereiche überspringen." Ist das korrekt? – ANjaNA
Ich mag die Bilder oben. Das bringt dir zusätzliche Liebe von mir. –