If you have a two dimensional array, each element in the first dimension potentially has its own memory space to store all items within it. So if you define your array as [x,y], and if let's say both x and y are 16, then for every x position in the array there is a separate block of memory with 16 y's in it. When you add a dimension to an array it stops being a contiguous block of memory. You could step through each of the elements in the first dimension and read the entire contents of that element's second dimension in sequence, but like at the end of a row you have to jump to a new memory location.
If you want a contiguous memory block I recommend using a bank instead of an array, or just allocate some memory yourself, and then use pointer access, because every time right now that you're doing array[x,y] blitzmax is behind the scenes going array+rowbasepointer+x to find the address. At least then you are in control of when you use it as rows and when you use it as a solid block of pixels. Also pointers to memory may be faster than arrays.
If you want a contiguous memory block I recommend using a bank instead of an array, or just allocate some memory yourself, and then use pointer access, because every time right now that you're doing array[x,y] blitzmax is behind the scenes going array+rowbasepointer+x to find the address. At least then you are in control of when you use it as rows and when you use it as a solid block of pixels. Also pointers to memory may be faster than arrays.