Exemplo n.º 1
0
void effectType(ByteArray* pixelArray, const Vector<float>& values)
{
    unsigned pixelArrayLength = pixelArray->length();
    for (unsigned pixelByteOffset = 0; pixelByteOffset < pixelArrayLength; pixelByteOffset += 4) {
        double red = pixelArray->get(pixelByteOffset);
        double green = pixelArray->get(pixelByteOffset + 1);
        double blue = pixelArray->get(pixelByteOffset + 2);
        double alpha = pixelArray->get(pixelByteOffset + 3);

        switch (filterType) {
            case FECOLORMATRIX_TYPE_MATRIX:
                matrix(red, green, blue, alpha, values);
                break;
            case FECOLORMATRIX_TYPE_SATURATE: 
                saturate(red, green, blue, values[0]);
                break;
            case FECOLORMATRIX_TYPE_HUEROTATE:
                huerotate(red, green, blue, values[0]);
                break;
            case FECOLORMATRIX_TYPE_LUMINANCETOALPHA:
                luminance(red, green, blue, alpha);
                break;
        }

        pixelArray->set(pixelByteOffset, red);
        pixelArray->set(pixelByteOffset + 1, green);
        pixelArray->set(pixelByteOffset + 2, blue);
        pixelArray->set(pixelByteOffset + 3, alpha);
    }
}
Exemplo n.º 2
0
void effectType(const PassRefPtr<CanvasPixelArray>& srcPixelArray, PassRefPtr<ImageData>& imageData, const Vector<float>& values)
{
    for (unsigned pixelOffset = 0; pixelOffset < srcPixelArray->length(); pixelOffset++) {
        unsigned pixelByteOffset = pixelOffset * 4;

        unsigned char r = 0, g = 0, b = 0, a = 0;
        srcPixelArray->get(pixelByteOffset, r);
        srcPixelArray->get(pixelByteOffset + 1, g);
        srcPixelArray->get(pixelByteOffset + 2, b);
        srcPixelArray->get(pixelByteOffset + 3, a);

        double red = r, green = g, blue = b, alpha = a;
        
        switch (filterType) {
            case FECOLORMATRIX_TYPE_MATRIX:
                matrix(red, green, blue, alpha, values);
                break;
            case FECOLORMATRIX_TYPE_SATURATE: 
                saturate(red, green, blue, values[0]);
                break;
            case FECOLORMATRIX_TYPE_HUEROTATE:
                huerotate(red, green, blue, values[0]);
                break;
            case FECOLORMATRIX_TYPE_LUMINANCETOALPHA:
                luminance(red, green, blue, alpha);
                break;
        }

        imageData->data()->set(pixelByteOffset, red);
        imageData->data()->set(pixelByteOffset + 1, green);
        imageData->data()->set(pixelByteOffset + 2, blue);
        imageData->data()->set(pixelByteOffset + 3, alpha);
    }
}
Exemplo n.º 3
0
QImage convertImage(const QImage& image, int hue, int saturation, int brightness, int gamma)
{
	float	mat[3][3] = {{1.0,0.0,0.0},{0.0,1.0,0.0},{0.0,0.0,1.0}};
	int	lut[3][3][256];
	QRgb	c;
	int	r,g,b,v,r2,g2,b2;
	float	gam = 1.0/(float(gamma)/1000.0);
	QImage	img(image);

	saturate(mat,saturation*0.01);
	huerotate(mat,(float)hue);
	bright(mat,brightness*0.01);
	for (int i = 0; i < 3; i ++)
	  for (int j = 0; j < 3; j ++)
	    for (int k = 0; k < 256; k ++)
		lut[i][j][k] = (int)(mat[i][j] * k + 0.5);
	
	img.detach();
	for (int i=0;i<image.width();i++)
	   for (int j=0;j<image.height();j++)
	   {
	   	c = image.pixel(i,j);
	   	r = qRed(c);
	   	g = qGreen(c);
	   	b = qBlue(c);

	   	v = lut[0][0][r] + lut[1][0][g] + lut[2][0][b];
	   	if (gamma != 1000) v = (int)rint(pow(v,gam));
	   	if (v < 0) r2 = 0;
	   	else if (v > 255) r2 = 255;
	   	else r2 = v;

	   	v = lut[0][1][r] + lut[1][1][g] + lut[2][1][b];
	   	if (gamma != 1000) v = (int)rint(pow(v,gam));
	   	if (v < 0) g2 = 0;
	   	else if (v > 255) g2 = 255;
	   	else g2 = v;

	   	v = lut[0][2][r] + lut[1][2][g] + lut[2][2][b];
	   	if (gamma != 1000) v = (int)rint(pow(v,gam));
	   	if (v < 0) b2 = 0;
	   	else if (v > 255) b2 = 255;
	   	else b2 = v;

	   	img.setPixel(i,j,qRgb(r2,g2,b2));
	   }
	return img;
}
void
cupsImageRGBAdjust(cups_ib_t *pixels,	/* IO - Input/output pixels */
        	   int       count,	/* I - Number of pixels to adjust */
        	   int       saturation,/* I - Color saturation (%) */
        	   int       hue)	/* I - Color hue (degrees) */
{
  int			i, j, k;	/* Looping vars */
  float			mat[3][3];	/* Color adjustment matrix */
  static int		last_sat = 100,	/* Last saturation used */
			last_hue = 0;	/* Last hue used */
  static cups_clut_t	*lut = NULL;	/* Lookup table for matrix */


  if (saturation != last_sat || hue != last_hue || !lut)
  {
   /*
    * Build the color adjustment matrix...
    */

    ident(mat);
    saturate(mat, saturation * 0.01);
    huerotate(mat, (float)hue);

   /*
    * Allocate memory for the lookup table...
    */

    if (lut == NULL)
      lut = calloc(3, sizeof(cups_clut_t));

    if (lut == NULL)
      return;

   /*
    * Convert the matrix into a 3x3 array of lookup tables...
    */

    for (i = 0; i < 3; i ++)
      for (j = 0; j < 3; j ++)
        for (k = 0; k < 256; k ++)
          lut[i][j][k] = mat[i][j] * k + 0.5;

   /*
    * Save the saturation and hue to compare later...
    */

    last_sat = saturation;
    last_hue = hue;
  }

 /*
  * Adjust each pixel in the given buffer.
  */

  while (count > 0)
  {
    i = lut[0][0][pixels[0]] +
        lut[1][0][pixels[1]] +
        lut[2][0][pixels[2]];
    if (i < 0)
      pixels[0] = 0;
    else if (i > 255)
      pixels[0] = 255;
    else
      pixels[0] = i;

    i = lut[0][1][pixels[0]] +
        lut[1][1][pixels[1]] +
        lut[2][1][pixels[2]];
    if (i < 0)
      pixels[1] = 0;
    else if (i > 255)
      pixels[1] = 255;
    else
      pixels[1] = i;

    i = lut[0][2][pixels[0]] +
        lut[1][2][pixels[1]] +
        lut[2][2][pixels[2]];
    if (i < 0)
      pixels[2] = 0;
    else if (i > 255)
      pixels[2] = 255;
    else
      pixels[2] = i;

    count --;
    pixels += 3;
  }
}