/* Create a planar buffer device. */ int gdev_prn_create_buf_planar(gx_device **pbdev, gx_device *target, int y, const gx_render_plane_t *render_plane, gs_memory_t *mem, gx_band_complexity_t *for_band) { int code = gx_default_create_buf_device(pbdev, target, y, render_plane, mem, for_band); if (code < 0) return code; if (gs_device_is_memory(*pbdev) /* == render_plane->index < 0 */) { code = gdev_prn_set_planar((gx_device_memory *)*pbdev, *pbdev); } return code; }
/* Determine the space needed by a planar buffer device. */ int gdev_prn_size_buf_planar(gx_device_buf_space_t *space, gx_device *target, const gx_render_plane_t *render_plane, int height, bool for_band) { gx_device_memory mdev; if (render_plane && render_plane->index >= 0) return gx_default_size_buf_device(space, target, render_plane, height, for_band); mdev.color_info = target->color_info; gdev_prn_set_planar(&mdev, target); if (gdev_mem_bits_size(&mdev, target->width, height, &(space->bits)) < 0) return_error(gs_error_VMerror); space->line_ptrs = gdev_mem_line_ptrs_size(&mdev, target->width, height); space->raster = bitmap_raster(target->width * mdev.planes[0].depth); return 0; }