def write_to_memory(self): """Write the image to a large memory array. A large area of memory is allocated, the image is rendered to that memory array, and the array is returned as a buffer. For example, if you have a 2x2 uchar image containing the bytes 1, 2, 3, 4, read left-to-right, top-to-bottom, then:: buf = image.write_to_memory() will return a four byte buffer containing the values 1, 2, 3, 4. Returns: buffer Raises: :class:`.Error` """ psize = ffi.new('size_t *') pointer = vips_lib.vips_image_write_to_memory(self.pointer, psize) if pointer == ffi.NULL: raise Error('unable to write to memory') pointer = ffi.gc(pointer, glib_lib.g_free) return ffi.buffer(pointer, psize[0])
def fetch(self, x, y, w, h): """Fill a region with pixel data. Pixels are filled with data! Returns: Pixel data. Raises: :class:`.Error` """ if not at_least_libvips(8, 8): raise Error('libvips too old') psize = ffi.new('size_t *') pointer = vips_lib.vips_region_fetch(self.pointer, x, y, w, h, psize) if pointer == ffi.NULL: raise Error('unable to fetch from region') pointer = ffi.gc(pointer, glib_lib.g_free) return ffi.buffer(pointer, psize[0])
def _marshal_write(source_custom, pointer, length, handle): buf = ffi.buffer(pointer, length) callback = ffi.from_handle(handle) return callback(buf)