add files
This commit is contained in:
commit
db33c2fb08
1284 changed files with 183815 additions and 0 deletions
106
share/doc/ImageMagick-7/www/source/contrast.c
Normal file
106
share/doc/ImageMagick-7/www/source/contrast.c
Normal file
|
|
@ -0,0 +1,106 @@
|
|||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <math.h>
|
||||
#include <wand/MagickWand.h>
|
||||
|
||||
int main(int argc,char **argv)
|
||||
{
|
||||
#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); \
|
||||
description=(char *) MagickRelinquishMemory(description); \
|
||||
exit(-1); \
|
||||
}
|
||||
|
||||
MagickBooleanType
|
||||
status;
|
||||
|
||||
MagickPixelPacket
|
||||
pixel;
|
||||
|
||||
MagickWand
|
||||
*contrast_wand,
|
||||
*image_wand;
|
||||
|
||||
PixelIterator
|
||||
*contrast_iterator,
|
||||
*iterator;
|
||||
|
||||
PixelWand
|
||||
**contrast_pixels,
|
||||
**pixels;
|
||||
|
||||
register ssize_t
|
||||
x;
|
||||
|
||||
size_t
|
||||
width;
|
||||
|
||||
ssize_t
|
||||
y;
|
||||
|
||||
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 < (ssize_t) 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 < (ssize_t) 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 < (ssize_t) MagickGetImageHeight(image_wand))
|
||||
ThrowWandException(image_wand);
|
||||
contrast_iterator=DestroyPixelIterator(contrast_iterator);
|
||||
iterator=DestroyPixelIterator(iterator);
|
||||
image_wand=DestroyMagickWand(image_wand);
|
||||
/*
|
||||
Write the image then destroy it.
|
||||
*/
|
||||
status=MagickWriteImages(contrast_wand,argv[2],MagickTrue);
|
||||
if (status == MagickFalse)
|
||||
ThrowWandException(image_wand);
|
||||
contrast_wand=DestroyMagickWand(contrast_wand);
|
||||
MagickWandTerminus();
|
||||
return(0);
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue