Jostain luin että moista voi optimoida niin että se vie vähemmän muistia, vaan vaikka löysinkin kaavan, en millään saanut siitä aikaan mitään toimivaa. Ohjeista ei ollut mitään apua, kun ne eivät selittäneet tarpeeksi kaavasta..
-Grey-
Kaavassa olevat arvot bits-per-pixel-per-plane ja planes saat selville ohjeessa olevasta taulukosta. Kuvan mittojen mukaan määräytyvät x1, y1, x2 ja y2. Tuo kaava siis kertoo, kuinka monta tavua tietynkokoinen kuva vie tilaa kussakin näyttötilassa. Jos taulukko varataan INTEGER-tyyppiseksi, alkioiden määrä on puolet tästä pyöristettynä ylöspäin.
Esim. Näyttötila on 13 ja kopioitava alue alkaa kohdasta (50, 60) ja päättyy kohtaan (70, 80). Taulukosta nähdään, että bits-per-pixel-per-plane on 8 ja planes on 1. Koordinaatit tiedetään: x1 on 50, y1 on 60, x2 on 70 ja y2 on 80. Kaavan perusteella saadaan:
4+INT(((x2-x1+1)*(bits-per-pixel-per-plane)+7)/8)*planes*((y2-y1)+1) = 4+INT(((70-50+1)*(8)+7)/8)*1*((80-60)+1) = 4+INT((21*8+7)/8)*21 = 4+21*21 = 445
Nyt siis tarvitaan INTEGER-taulukko, jonka alkioiden määrä on 445 / 2 eli 223.
SCREEN 13 DIM kuva(223) AS INTEGER GET (50, 60)-(70, 80), kuva
Näköjään taulukon kooksi kävisi myös 222 tavua, 221 aiheuttaa kuitenkin ilmoituksen "Illegal function call". Kaava ei siis välttämättä anna pienintä mahdollista arvoa.
Aihe on jo aika vanha, joten et voi enää vastata siihen.