Ein Algorithmus zum Iterieren über einen rechteckigen Bereich innerhalb eines 1-dimensionalen Arrays (Bitmapping)

9

Das ist eine seltsame Frage, für die ich Schwierigkeiten hatte, einen Titel zu schreiben.

Ich arbeite mit Pixeln (genauer Bitmaps) 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 eines grundlegenden n = 2 Canvas:

Ссылка

Ich möchte, dass mein magischer Algorithmus von 0 bis 495 läuft, ohne den helleren grauen Bereich zu berühren, dann von 16 auf 512 (was tatsächlich Zelle 511 ist, mein schlechter), ohne den dunkelgrauen Bereich zu berühren.

Also, 0 bis 15, überspringe 16 bis 31, gefolgt von 32 bis 47 usw.

Und für n = 3:

Ссылка

In diesem Fall würde 0-735 die helleren grauen Bereiche übersprin- gen, 16-751 die Bereiche auf jeder Seite übersprin- gen und 32-767 die dunkleren grauen Bereiche übersprin- gen.

Was ich versucht habe:

Hier ist ein Auszug aus meinem Code, hoffentlich ist es nützlich und zeigt, was ich schon versucht habe. Es ist der Teil, der den Wert für 'idxpos' ermittelt.

%Vor%

Sie haben wahrscheinlich die Idee. Es klingt einfach für mich, 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.

    
Southclaws 22.04.2015, 16:15
quelle

4 Antworten

2

Wenn ich Ihre Frage richtig beantworte, möchten Sie sie in der von Ihnen genannten Reihenfolge besuchen. Hier ist der Code, der das tut (gegeben n ):

%Vor%

Hoffe, das hilft.

    
Filip Kowalski 22.04.2015, 16:31
quelle
2

Es ist einfach genug. Nehmen wir n als Multiplikator der Rechteckgesamtbreite und bitmap als Rechteckdaten:

%Vor%

Nun sagen Sie, dass Sie es auf dem zweiten Quadrat oder Quadrat des Index square = 1 machen wollen:

%Vor%

Sie können auch eine allgemeinere Funktion für alle Formen von Bitmaps verwenden, die ein rect verwenden und Ihnen erlauben, Daten in jedem beliebigen Rechteck innerhalb Ihrer Bitmap zu ändern. Es benötigt nur die Bitmap width als Referenz:

%Vor%     
Havenard 22.04.2015 17:10
quelle
0

Machen Sie einfach eine x-y-Schleife für jedes Sprite

%Vor%     
6502 22.04.2015 17:22
quelle
0

Folgendes sollte funktionieren:

%Vor%     
Lingxi 22.04.2015 17:12
quelle

Tags und Links