/*****************************************************************************\ image:SetPalette \*****************************************************************************/ static int imluaImageSetPalette (lua_State *L) { imImage *image = imlua_checkimage(L, 1); imluaPalette *pal = imlua_checkpalette(L, 2); long* palette = (long*)malloc(sizeof(long)*256); memcpy(palette, pal->color, pal->count*sizeof(long)); imImageSetPalette(image, palette, pal->count); return 0; }
void imProcessSplitHSI(const imImage* src_image, imImage* dst_image1, imImage* dst_image2, imImage* dst_image3) { switch(src_image->data_type) { case IM_BYTE: DoSplitHSIByte((imbyte**)src_image->data, (float*)dst_image1->data[0], (float*)dst_image2->data[0], (float*)dst_image3->data[0], src_image->count); break; case IM_FLOAT: DoSplitHSIFloat((float**)src_image->data, (float*)dst_image1->data[0], (float*)dst_image2->data[0], (float*)dst_image3->data[0], src_image->count); break; } imImageSetPalette(dst_image1, imPaletteHues(), 256); }
void imProcessQuantizeRGBUniform(const imImage* src_image, imImage* dst_image, int dither) { imbyte *dst_map=(imbyte*)dst_image->data[0], *red_map=(imbyte*)src_image->data[0], *green_map=(imbyte*)src_image->data[1], *blue_map=(imbyte*)src_image->data[2]; imImageSetPalette(dst_image, imPaletteUniform(), 256); for (int y = 0; y < src_image->height; y++) { for (int x = 0; x < src_image->width; x++) { if (dither) *dst_map++ = (imbyte)imPaletteUniformIndexHalftoned(imColorEncode(*red_map++, *green_map++, *blue_map++), x, y); else *dst_map++ = (imbyte)imPaletteUniformIndex(imColorEncode(*red_map++, *green_map++, *blue_map++)); } } }