Kuvien käsittely muistipaloilla?
Posted: Sat Feb 11, 2012 12:38 pm
Päätin kokeilla, ovatko CB:ssä ladatut kuvat jotenkin luettavissa muistipalojen avulla. Muutamien testiarvojen jälkeen huomasin, että jos käytetään kuvamuuttujaa muistipalan kahvana ja vähennetään siitä 24:
HUOM! koodin ajaminen saattaa kaataa ohjelman, mahdollisesti koko koneen! Älä siis suorita seuraavaa koodia, jos koneen kaatumisia on esiintynyt käsitellessäsi muistipaloja väärin!
Tuloksena ei tule Memory Access Violationia, toisin kuin millään muilla arvoilla kokeiltaessa, vaan tulostuu arvoja, myös nollasta poikkeavia. Siispä tuossa osoitteessa saattaa olla luettavaa dataa, jota voitaisiin muokata muistipaloilla huomattavasti nopeammin kuin perineisillä piirtokomennoilla! Mutta toistaiseksi seuraavia omituisia ongelmia on tullut vastaan:
HUOM! koodin ajaminen saattaa kaataa ohjelman, mahdollisesti koko koneen! Älä siis suorita seuraavaa koodia, jos koneen kaatumisia on esiintynyt käsitellessäsi muistipaloja väärin!
Code: Select all
img = LoadImage("Media\tatti.bmp")
'img = MakeImage(16, 16)
'DrawToImage img
' Color 255, 0, 0
' Box 0, 0, 16, 16
'DrawToScreen
fLog = OpenToWrite("imagelog.txt")
w = ImageWidth(img)
h = ImageHeight(img)
Print "Reading MEMBlock from: " + img
WriteLine fLog, "Reading MEMBlock from: " + img
For i = 0 To w*h*4-1
Print " Byte ID " + i + "; data: " + PeekInt(img-24, i*4)
WriteLine fLog, " Byte ID " + i + "; data: " + Bin(PeekInt(img-24, i*4))
Next i
CloseFile fLog
WaitKey
//KUVAN PIIRTOA; täyttä sekamelskaa, ehkä uusi satunnaislukugeneraattori?
'Lock
'For i = 0 To w*h
' PutPixel2 i Mod (w+1), RoundDown(i / h), PeekInt(img-24, i*4)
'Next i
'Unlock
'DrawScreen
'WaitKey
- Ladatuilla kuvilla muuttujan vähentäminen 24:llä toimii, kun lennossa luoduilla kuvilla taas ei.
- Arvot eivät tunnu vastaavan lainkaan ladatun kuvan väriarvoja. Arvot muuttuvat aivan toisiksi joka ikisellä kerralla, vaikka kokeilin yksivärisillä kuvilla.
- Satunnaisilla ajokerroilla ohjelma MAVittaa kesken datan luennan.
- IMAGE()-funktio käytäytyy omituisesti. Jos siitä otetaan arvo ja tulostetaan se, seuraavalla lukukerralla ohjelma MAVittaa!