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) pointer = ffi.gc(pointer, glib_lib.g_free) return ffi.buffer(pointer, psize[0])
def __init__(self): # allocate memory for the gvalue which will be freed on GC self.pointer = ffi.new('GValue *') # logger.debug('GValue.__init__: pointer = %s', self.pointer) # and tag it to be unset on GC as well self.gvalue = ffi.gc(self.pointer, gobject_lib.g_value_unset)
def _to_string_copy(x): """Convert to a unicode string, and auto-free. As _to_string(), but also tag x as a pointer to a memory area that must be freed with g_free(). """ return _to_string(ffi.gc(x, glib_lib.g_free))
def __init__(self, pointer): """Wrap around a pointer. Wraps a GObject instance around an underlying pointer. When the instance is garbage-collected, the underlying object is unreferenced. """ # record the pointer we were given to manage self.pointer = pointer # logger.debug('GObject.__init__: pointer = %s', str(self.pointer)) # on GC, unref self.gobject = ffi.gc(self.pointer, gobject_lib.g_object_unref)
def __init__(self, pointer): """Wrap around a pointer. Wraps a GObject instance around an underlying pointer. When the instance is garbage-collected, the underlying object is unreferenced. """ # we have to record all of the ffi.new_handle we make for callbacks on # this object to prevent them being GC'd self._handles = [] # record the pointer we were given to manage # on GC, unref self.pointer = ffi.gc(pointer, gobject_lib.g_object_unref)
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])