Пример #1
0
static MagickBooleanType recolor(WandView *view, const ssize_t y, const int id, void *context){

  RectangleInfo extent;
  MagickPixelPacket pixel;
  PixelWand **pixels;
  register ssize_t x;
  register float t;

  extent = GetWandViewExtent(view);
  pixels = GetWandViewPixels(view);
  for (x = 0; x < (ssize_t) (extent.width - extent.x); x++){
    PixelGetMagickColor(pixels[x], &pixel);
    t = ScaleQuantumToChar(pixel.red);
    pixel.red = get_color(t, 0);
    pixel.green = get_color(t, 1);
    pixel.blue = get_color(t, 2);
    PixelSetMagickColor(pixels[x], &pixel);
  }
  return(MagickTrue);
}
Пример #2
0
void Resize(MagickWand *imagen, MagickWand *imagen2, int proporcion)
{
	int ancho, largo, factor_conversion;
	register ssize_t x;
	size_t width, width2;
	ssize_t y;
	int ity, itx, index = 0;
	MagickPixelPacket pixel, pixel2;
	PixelIterator *iterator, *iterator2;
	PixelWand **pixels, **pixels2;

	PixelWand *bgw1 = NewPixelWand();
	factor_conversion = abs(proporcion);
	if(proporcion >= 0){
		ancho = MagickGetImageWidth(imagen)*factor_conversion;
		largo = MagickGetImageHeight(imagen)*factor_conversion;
	}else{
		ancho = (MagickGetImageWidth(imagen)/factor_conversion)+1;
		largo = (MagickGetImageHeight(imagen)/factor_conversion)+1;
	}
	MagickNewImage(imagen2,ancho,largo,bgw1);

	iterator = NewPixelIterator(imagen);
	iterator2 = NewPixelIterator(imagen2);
	
	
	
	if(proporcion >= 0){
		//****************** ITERACION PIXEL POR PIXEL ***********************
		for (y=0; y < (ssize_t) MagickGetImageHeight(imagen); y++)
		{
			pixels = PixelGetNextIteratorRow(iterator,&width);
			if (pixels == (PixelWand **) NULL) break;
			for(ity=0; ity < factor_conversion; ity++){
				pixels2 = PixelGetNextIteratorRow(iterator2,&width2);
				for (x=0; x < (ssize_t) width; x++)
				{
					PixelGetMagickColor(pixels[x],&pixel);
					for(itx=0;itx<factor_conversion;itx++){
						PixelGetMagickColor(pixels2[factor_conversion*x+itx],&pixel2);
						pixel2.red = pixel.red;
						pixel2.green = pixel.green;
						pixel2.blue = pixel.blue;
						PixelSetMagickColor(pixels2[factor_conversion*x+itx],&pixel2);
					}
				}
				(void) PixelSyncIterator(iterator2);
			}
			(void) PixelSyncIterator(iterator);
		
		}
		//******************************************************************
	}else{
		//****************** ITERACION PIXEL POR PIXEL ***********************
		for (y=0; y < (ssize_t) MagickGetImageHeight(imagen); y++)
		{
			pixels = PixelGetNextIteratorRow(iterator,&width);
			if (pixels == (PixelWand **) NULL) break;
			pixels2 = PixelGetNextIteratorRow(iterator2,&width2);
			for (x=0; x < (ssize_t) width; x++)
			{
				if(x%factor_conversion == 0){
					PixelGetMagickColor(pixels[x],&pixel);
					PixelGetMagickColor(pixels2[index],&pixel2);
					pixel2.red = pixel.red;
					pixel2.green = pixel.green;
					pixel2.blue = pixel.blue;
					PixelSetMagickColor(pixels2[index],&pixel2);
					index++;
				}
			}
			index = 0;
			for(ity=1;ity<factor_conversion;ity++){
				pixels = PixelGetNextIteratorRow(iterator,&width);
			}
			(void) PixelSyncIterator(iterator2);
			(void) PixelSyncIterator(iterator);
		
		}
		//******************************************************************
	}
	iterator = DestroyPixelIterator(iterator);
	iterator = DestroyPixelIterator(iterator2);
}
Пример #3
0
int main(int argc, char **argv)
{
	printf("Hello World\n");
#define QuantumScale ((MagickRealType) 1.0/(MagickRealType) QuantumRange)
#define SigmoidalContrast(x) (QuantumRange*(1.0/(1+exp(10.0*(0.5-QuantumScale*x)))-0.0066928509)*1.0092503)

#define ThrowWandException(wand)\
	{\
		char *description;\
		ExceptionType\
		severity;\
		\
		description=MagickGetException(wand,&severity);\
		(void)fprintf(stderr,"%s %s %lu %s\n",GetMagickModule(),description);\
		exit(-1);\
	}
	long y;
	MagickBooleanType status;
	MagickPixelPacket pixel;
	MagickWand *contrast_wand, *image_wand;
	PixelIterator *contrast_iterator,*iterator;
	PixelWand **contrast_pixels, **pixels;
	register long x;
	unsigned long width;

	if (argc != 3)
	{
		(void)fprintf(stdout,"Usage: %s image sigmoidal-image\n",argv[0]);
		exit(0);
	}

	/*
	   Read an Image
	   */

	MagickWandGenesis();
	image_wand = NewMagickWand();
	status = MagickReadImage(image_wand,argv[1]);
	if(status == MagickFalse)
		ThrowWandException(image_wand);
	contrast_wand = CloneMagickWand(image_wand);
	/*
	   Sigmoidal non-linearity contrast control.
	   */

	iterator = NewPixelIterator(image_wand);
	contrast_iterator=NewPixelIterator(contrast_wand);

	if((iterator == (PixelIterator*)NULL) || (contrast_iterator == (PixelIterator*)NULL))
		ThrowWandException(image_wand);

	for(y=0; y<(long)MagickGetImageHeight(image_wand); y++)
	{
		pixels = PixelGetNextIteratorRow(iterator,&width);
		contrast_pixels = PixelGetNextIteratorRow(contrast_iterator,&width);
		if((pixels==(PixelWand**)NULL) || (contrast_pixels == (PixelWand**)NULL))
			break;

		for(x = 0; x<(long)width; x++)
		{
			PixelGetMagickColor(pixels[x],&pixel);
			pixel.red = SigmoidalContrast(pixel.red);
			pixel.green = SigmoidalContrast(pixel.green);
			pixel.blue = SigmoidalContrast(pixel.blue);
			pixel.index = SigmoidalContrast(pixel.index);
			PixelSetMagickColor(contrast_pixels[x],&pixel);
		}
		(void)PixelSyncIterator(contrast_iterator);
	}
	if(y < (long)MagickGetImageHeight(image_wand))
		ThrowWandException(image_wand);
	contrast_iterator = DestroyPixelIterator(contrast_iterator);
	iterator = DestroyPixelIterator(iterator);
	image_wand=DestroyMagickWand(image_wand);

	status = MagickWriteImages(contrast_wand,argv[2],MagickTrue);
	if(status == MagickFalse)
		ThrowWandException(image_wand);
	contrast_wand = DestroyMagickWand(contrast_wand);
	MagickWandTerminus();
	return 0;
}