It's inconvenient for your function, but very sensible in the long run. Otherwise thingk of the memory and CPU overhead if an image was copied every time it was passed into a function! That's what you need to do btw, use the Image passed in to call temp=CreateImage with the correct sizes, then set the buffer to Image and do a grab image to temp and then work on temp.