how do you edit a large image?

BlitzMax Forums/BlitzMax Programming/how do you edit a large image?

ive tried canvases but you cant make them bigger than the screen, ive tried buffers but they don exist in max.

so, how does someone perform pixel ops on a large image?!?
Speed isnt an issue as its for rendering not realtime.

isnt there something like:
writepixeltoimage (timage,x,y,argb)

i find it a bit dissapointing if there isnt some way of doing something as 'standard' as this.

You can lockimage and then writepixel or even load the image as a pixmap to save the conversion process.

LOCKIMAGE!

lovely jubly

cheers :)

errr whats the difference between image & pixmap?

Pixmap: RAM based, pixel data array. Is drawn by copying the data into the backbuffer. Does not support alpha and is significantly slower than images due the way it works.

Image: Texture which is in VRAM (if drawn) and drawn by hardware. supports alpha and blending. can't be changed in realtime, only by lockimage or grabimage. due to beeing a texture, its faster than pixmaps

Depending on hardware, pixmap are 10+ times slower than textures.

What i am trying to do is re render thumbnails of alpha textures to a white background (basically replace the alpha channel with white)

If pixmaps dont support alpha, what are the functions for (see help for create pixmap) Bit confusing if u ask me :O

One question, is there a way of creating a 2d array of alpha values from a png? if i can do this i can prehaps re-render them by mixing the color.

Does not support alpha
It depends on the pixmap format you use:
PF_I8 and PF_RGB888 and PF_BGR888: without alpha
PF_A8 and PF_RGBA8888 and PF_BGRA8888: with alpha

LockImage (and CreatePixmap) return RGBA8888 pixmaps.

I think i need to work out my rgb funcs unfortunately while ok(ish) with geometery my binary maths suck :P

These functions, i think ive got the return argb right with the shl24 but could someone sheck the others for me?

Function ARGB(R%, G%, B%, A%)
; Local res = B + G * 256 + R * 256 * 256
res=(b Or (g Shl 8) Or (r Shl 16) Or (a Shl 24))

 Return res 
End Function

Function getRed(ARGB)
 ;Local res = RGB / (256 * 256) + 256
 res=(ARGB Shr 16) And $ff
 Return res
End Function

Function getGreen(ARGB)
; Local res = (RGB Mod (256 * 256)) / 256 + 256
 res=(ARGB Shr 8) And $ff
 Return res
End Function

Function getBlue(ARGB)
 ;Local res = (RGB Mod (256 * 256)) Mod 256 + 256
res=ARGB And $ff
 Return res
End Function

Function getAlph(ARGB)
res=(ARGB Shr 24) And $ff '<-----do i need this ff if so whats it for?!?
 Return res
End Function




you need the $ff to filter out all other bits apart from the byte you are wanting to return (i.e. the byte that you have just shifted). I think when you SHR that 0 bits are brought in from the left so maybe the $ff isn't needed when you shift by 24. There is a rotate bits command in assembly and if you were using that the $ff bitmask would be required.

ahaa

cheers >:)

shouldn't it be the bit wise operator "|" not the logical operator "or"?

Yupp it should.

AND / OR are only binary operators, no bit operators. | and & are the ones to use for bit operations as with C (I wonder why << >> aren't supported instead of shl shr ^^)

I don't want to understand that. I dont want to understand that. I dont want to understand that....... too late. :-).