If the image comming from a camera device create raw data image:

1- bool RawImage::create( int width, int height, int channels )
2- write your buffer RawImage::QByteArray data....
3- at end QImage convertToQImage(bool cmyk = false , bool raw = false);

( idea from www.scribus.net code )

Qt Code:
  1. ///// header
  2. #ifndef RAWIMAGE_H
  3. #define RAWIMAGE_H
  4.  
  5. #include <QtGui>
  6.  
  7. class RawImage : public QByteArray
  8. {
  9. public:
  10. RawImage();
  11. RawImage( int width, int height, int channels);
  12. ~RawImage();
  13. bool create( int width, int height, int channels);
  14. int width() const {
  15. return m_width;
  16. };
  17. int height() const {
  18. return m_height;
  19. };
  20. int channels() const {
  21. return m_channels;
  22. };
  23. uchar *bits() {
  24. return (uchar*)data();
  25. };
  26. uchar *scanLine(int row);
  27. void setAlpha(int x, int y, int alpha);
  28. QImage convertToQImage(bool cmyk = false , bool raw = false);
  29. private:
  30. int m_width;
  31. int m_height;
  32. int m_channels;
  33. };
  34.  
  35.  
  36. #endif
  37. ///// source
  38.  
  39. #include "rawimage.h"
  40.  
  41.  
  42. RawImage::RawImage()
  43. {
  44. m_width = 0;
  45. m_height = 0;
  46. m_channels = 0;
  47. resize(0);
  48. }
  49.  
  50. RawImage::RawImage( int width, int height, int channels )
  51. {
  52. create(width, height, channels);
  53. }
  54.  
  55. RawImage::~RawImage()
  56. {
  57. resize(0);
  58. }
  59.  
  60. bool RawImage::create( int width, int height, int channels )
  61. {
  62. m_width = width;
  63. m_height = height;
  64. m_channels = channels;
  65. int finalSize=width * height * channels;
  66. resize(finalSize);
  67. return (size()==finalSize);
  68. }
  69.  
  70. uchar *RawImage::scanLine(int row)
  71. {
  72. if (row < m_height)
  73. return (uchar*)(data() + (row * m_channels * m_width));
  74. else
  75. return (uchar*)data();
  76. }
  77.  
  78. void RawImage::setAlpha(int x, int y, int alpha)
  79. {
  80. uchar *d;
  81. if ((y < m_height) && (x < m_width))
  82. {
  83. d = (uchar*)(data() + (y * m_channels * m_width) + (x * m_channels));
  84. d[m_channels-1] = alpha;
  85. }
  86. }
  87.  
  88.  
  89. QImage RawImage::convertToQImage(bool cmyk, bool raw)
  90. {
  91. int chans = channels();
  92. QImage img = QImage(width(), height(), QImage::Format_ARGB32);
  93. QRgb *ptr;
  94. uchar *src;
  95. uchar cr, cg, cb, ck, ca;
  96. // img.create(width(), height(), 32);
  97. if (raw)
  98. {
  99. for (int i = 0; i < height(); i++)
  100. {
  101. ptr = (QRgb *)img.scanLine(i);
  102. src = scanLine(i);
  103. for (int j = 0; j < width(); j++)
  104. {
  105. *ptr++ = qRgba(src[0],src[1],src[2],src[3]);
  106. src += chans;
  107. }
  108. qDebug() << "## raw line -> " << i;
  109. }
  110. }
  111. else
  112. {
  113. // img.setAlphaBuffer( true );
  114. for (int i = 0; i < height(); i++)
  115. {
  116. ptr = (QRgb *)img.scanLine(i);
  117. src = scanLine(i);
  118. for (int j = 0; j < width(); j++)
  119. {
  120. if (chans > 1)
  121. {
  122. if (cmyk)
  123. {
  124. ck = src[3];
  125. cr = 255 - qMin(255, src[0] + ck);
  126. cg = 255 - qMin(255, src[1] + ck);
  127. cb = 255 - qMin(255, src[2] + ck);
  128. if (chans > 4)
  129. {
  130. ca = src[4];
  131. *ptr++ = qRgba(cr,cg,cb,ca);
  132. }
  133. else
  134. *ptr++ = qRgba(cr,cg,cb,255);
  135. }
  136. else
  137. {
  138. if (chans > 3)
  139. *ptr++ = qRgba(src[0],src[1],src[2],src[3]);
  140. else
  141. *ptr++ = qRgba(src[0],src[1],src[2],255);
  142. }
  143. }
  144. else
  145. *ptr++ = qRgba(src[0],src[0],src[0],255);
  146. src += chans;
  147. }
  148.  
  149. //////qDebug() << "## n line -> " << i;
  150.  
  151. }
  152. }
  153. return img;
  154. }
To copy to clipboard, switch view to plain text mode 

wath is your source data tiff?