IoObject *IoImage_setDataWidthHeightComponentCount(IoImage *self, IoObject *locals, IoMessage *m) { /*doc Image setDataWidthHeightComponentCount(aSequence, width, height, componentCount) Sets the image data and its parameters. Returns self. */ IoSeq *data = IoMessage_locals_seqArgAt_(m, locals, 0); int w = IoMessage_locals_intArgAt_(m, locals, 1); int h = IoMessage_locals_intArgAt_(m, locals, 2); int c = IoMessage_locals_intArgAt_(m, locals, 3); //printf("Image Image_setData_width_height_componentCount_\n"); Image_setData_width_height_componentCount_(DATA(self)->image, IoSeq_rawUArray(data), w, h, c); //printf("Image returning self\n"); return self; }
void Image_resizeTo(Image *self, int w, int h, Image *outImage) { int componentCount = self->componentCount; int inStride = self->width * componentCount; uint8_t *inPtr = Image_data(self); int outStride = w * componentCount; uint8_t *outPtr; int y; UArray *outUArray = UArray_new(); UArray_setSize_(outUArray, h * outStride); outPtr = (uint8_t *)UArray_bytes(outUArray); for (y=0; y < self->height; y++, inPtr += inStride, outPtr += outStride) memcpy(outPtr, inPtr, inStride); Image_setData_width_height_componentCount_(outImage, outUArray, w, h, componentCount); }