Hello,

i must implement a brightness/contrast filter.

So far I've managed to brighten an image as follows :

Qt Code:
  1. QImage ConvolutionFilter:: brighten(QImage& source, int factor)
  2. {
  3. if (factor < -255 || factor > 255) return source;
  4. int red, green, blue;
  5.  
  6. /* for ( int y=0; y<source.height(); y++ ) {
  7.   uchar *p = source.scanLine(y);
  8.   for (int x = 0; x < source.width(); x ++) {
  9. red = int((*p++) + factor);
  10. red = (red < 0x00) ? 0x00 : (red > 0xff) ? 0xff : red;
  11.   green = int((*p++)+ factor);
  12. green = (green < 0x00) ? 0x00 : (green > 0xff) ? 0xff : green;
  13.   blue = int((*p++) + factor);
  14. blue = (blue < 0x00) ? 0x00 : (blue > 0xff) ? 0xff : blue ;
  15.   int alpha = int(*p++);
  16.   QRgb rgbaValue = qRgba(red,green,blue, alpha);
  17. source.setPixel(x,y, rgbaValue);
  18. }
  19. }*/
  20.  
  21. int pixels = source.width() * source.height();
  22. unsigned int *data = (unsigned int *)source.bits();
  23. for (int i = 0; i < pixels; ++i) {
  24. red= qRed(data[i])+ factor;
  25. red = (red < 0x00) ? 0x00 : (red > 0xff) ? 0xff : red;
  26. green= qGreen(data[i])+factor;
  27. green = (green < 0x00) ? 0x00 : (green > 0xff) ? 0xff : green;
  28. blue= qBlue(data[i])+factor;
  29. blue = (blue < 0x00) ? 0x00 : (blue > 0xff) ? 0xff : blue ;
  30. data[i] = qRgba(red, green, blue, qAlpha(data[i]));
  31. }
  32. return source;
  33. }
To copy to clipboard, switch view to plain text mode 

But I'm totally stuck with contrast.

I would deeply appreciate if someone could give me some hints how to handle this task.

Regards.