pointer naar gedeelte van array

Status
Niet open voor verdere reacties.

janmulder13

Gebruiker
Lid geworden
15 sep 2009
Berichten
43
Hallo,
Ik heb deze array:
Code:
unsigned short array[256*192];
Je moet je indenken dat deze array een beeld is met 256x192 pixels. En je kunt bij de pixels door array[256*y+x] te doen.

Nu wil ik graag een vierkant vlak (zeg 32x32 met 0,0 op 20,20 van het beeld) vervangen door deze array:
Code:
unsigned short array2[32*32];

En ik heb deze functie:
Code:
dmaCopy(source, destination, bytes);

Hoe kan ik nu zorgen dat destination een pointer is naar het gedeelte van de array? Ik wil dus eigenlijk dat het een pointer is naar array[20*256+20] t/m array[20*256+51] en dat hij dan verder gaat in array[21*256+20] t/m array[21*256+51] enzovoorts.
Is dit überhaupt mogelijk?

Alvast bedankt!
 
Moet je je per se aan de specificatie van dmaCopy houden?

Anders zou ik het op deze manier oplossen:
Code:
const int SCREEN_WIDTH = 256;
const int SCREEN_HEIGHT = 192;

unsigned short screen[SCREEN_WIDTH*SCREEN_HEIGHT];

void drawPixel(unsigned short color, int x, int y) {
    screen[SCREEN_WIDTH*y+x] = color;
}

// left is the x value of the left edge of the rectangle
// top is the y value of the top edge of the rectangle
void drawPixels(unsigned short *pixels, int left, int top, int width, int height) {
    for (int y = 0; y < height; ++y) {
        for (int x = 0; x < width; ++x) {
            drawPixel(pixels[width*y+x], left+x, top+y);
        }
    }
}
 
Moet je je per se aan de specificatie van dmaCopy houden?
Helaas wel, het moet echt zo snel mogelijk gebeuren zeg maar, en dmaCopy is gewoon veel sneller.

Als ik me niet aan dmaCopy zou hoeven houden had ik het inderdaad ook zo gedaan...

Ik had het trouwens ook al op deze manier geprobeerd:
Code:
unsigned short screen[256*192];
unsigned short pixels[32*32];
u16 *pointer[32*32];
int i = 0;

for(i=0;i<32*32;i++) {
pointer[i] = &screen[(20+i/32)*256+(20+i%32)];
}

dmaCopy(pixels,*pointer,32*32*2);

maar dat is ten eerste al weer langzamer en ten tweede werkt het niet eens... :confused:
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan