qimage.h
上传用户:detong
上传日期:2022-06-22
资源大小:20675k
文件大小:13k
源码类别:

系统编程

开发平台:

Unix_Linux

  1. /****************************************************************************
  2. **
  3. ** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies).
  4. ** Contact: Qt Software Information (qt-info@nokia.com)
  5. **
  6. ** This file is part of the QtGui module of the Qt Toolkit.
  7. **
  8. ** Commercial Usage
  9. ** Licensees holding valid Qt Commercial licenses may use this file in
  10. ** accordance with the Qt Commercial License Agreement provided with the
  11. ** Software or, alternatively, in accordance with the terms contained in
  12. ** a written agreement between you and Nokia.
  13. **
  14. **
  15. ** GNU General Public License Usage
  16. ** Alternatively, this file may be used under the terms of the GNU
  17. ** General Public License versions 2.0 or 3.0 as published by the Free
  18. ** Software Foundation and appearing in the file LICENSE.GPL included in
  19. ** the packaging of this file.  Please review the following information
  20. ** to ensure GNU General Public Licensing requirements will be met:
  21. ** http://www.fsf.org/licensing/licenses/info/GPLv2.html and
  22. ** http://www.gnu.org/copyleft/gpl.html.  In addition, as a special
  23. ** exception, Nokia gives you certain additional rights. These rights
  24. ** are described in the Nokia Qt GPL Exception version 1.3, included in
  25. ** the file GPL_EXCEPTION.txt in this package.
  26. **
  27. ** Qt for Windows(R) Licensees
  28. ** As a special exception, Nokia, as the sole copyright holder for Qt
  29. ** Designer, grants users of the Qt/Eclipse Integration plug-in the
  30. ** right for the Qt/Eclipse Integration to link to functionality
  31. ** provided by Qt Designer and its related libraries.
  32. **
  33. ** If you are unsure which license is appropriate for your use, please
  34. ** contact the sales department at qt-sales@nokia.com.
  35. **
  36. ****************************************************************************/
  37. #ifndef QIMAGE_H
  38. #define QIMAGE_H
  39. #include <QtGui/qtransform.h>
  40. #include <QtGui/qpaintdevice.h>
  41. #include <QtGui/qrgb.h>
  42. #include <QtCore/qbytearray.h>
  43. #include <QtCore/qrect.h>
  44. #include <QtCore/qstring.h>
  45. QT_BEGIN_HEADER
  46. QT_BEGIN_NAMESPACE
  47. QT_MODULE(Gui)
  48. class QIODevice;
  49. class QStringList;
  50. class QMatrix;
  51. class QTransform;
  52. class QVariant;
  53. template <class T> class QList;
  54. template <class T> class QVector;
  55. struct QImageData;
  56. class QImageDataMisc; // internal
  57. #ifndef QT_NO_IMAGE_TEXT
  58. class Q_GUI_EXPORT QImageTextKeyLang {
  59. public:
  60.     QImageTextKeyLang(const char* k, const char* l) : key(k), lang(l) { }
  61.     QImageTextKeyLang() { }
  62.     QByteArray key;
  63.     QByteArray lang;
  64.     bool operator< (const QImageTextKeyLang& other) const
  65.         { return key < other.key || (key==other.key && lang < other.lang); }
  66.     bool operator== (const QImageTextKeyLang& other) const
  67.         { return key==other.key && lang==other.lang; }
  68.     inline bool operator!= (const QImageTextKeyLang &other) const
  69.         { return !operator==(other); }
  70. };
  71. #endif //QT_NO_IMAGE_TEXT
  72. class Q_GUI_EXPORT QImage : public QPaintDevice
  73. {
  74. public:
  75.     enum InvertMode { InvertRgb, InvertRgba };
  76.     enum Format {
  77.         Format_Invalid,
  78.         Format_Mono,
  79.         Format_MonoLSB,
  80.         Format_Indexed8,
  81.         Format_RGB32,
  82.         Format_ARGB32,
  83.         Format_ARGB32_Premultiplied,
  84.         Format_RGB16,
  85.         Format_ARGB8565_Premultiplied,
  86.         Format_RGB666,
  87.         Format_ARGB6666_Premultiplied,
  88.         Format_RGB555,
  89.         Format_ARGB8555_Premultiplied,
  90.         Format_RGB888,
  91.         Format_RGB444,
  92.         Format_ARGB4444_Premultiplied,
  93. #if 0
  94.         // reserved for future use
  95.         Format_RGB15,
  96.         Format_Grayscale16,
  97.         Format_Grayscale8,
  98.         Format_Grayscale4,
  99.         Format_Grayscale4LSB,
  100.         Format_Grayscale2,
  101.         Format_Grayscale2LSB
  102. #endif
  103. #ifndef qdoc
  104.         NImageFormats
  105. #endif
  106.     };
  107.     QImage();
  108.     QImage(const QSize &size, Format format);
  109.     QImage(int width, int height, Format format);
  110.     QImage(uchar *data, int width, int height, Format format);
  111.     QImage(const uchar *data, int width, int height, Format format);
  112.     QImage(uchar *data, int width, int height, int bytesPerLine, Format format);
  113.     QImage(const uchar *data, int width, int height, int bytesPerLine, Format format);
  114. #ifndef QT_NO_IMAGEFORMAT_XPM
  115.     explicit QImage(const char * const xpm[]);
  116. #endif
  117.     explicit QImage(const QString &fileName, const char *format = 0);
  118. #ifndef QT_NO_CAST_FROM_ASCII
  119.     explicit QImage(const char *fileName, const char *format = 0);
  120. #endif
  121.     QImage(const QImage &);
  122.     ~QImage();
  123.     QImage &operator=(const QImage &);
  124.     bool isNull() const;
  125.     int devType() const;
  126.     bool operator==(const QImage &) const;
  127.     bool operator!=(const QImage &) const;
  128.     operator QVariant() const;
  129.     void detach();
  130.     bool isDetached() const;
  131.     QImage copy(const QRect &rect = QRect()) const;
  132.     inline QImage copy(int x, int y, int w, int h) const
  133.         { return copy(QRect(x, y, w, h)); }
  134.     Format format() const;
  135.     QImage convertToFormat(Format f, Qt::ImageConversionFlags flags = Qt::AutoColor) const Q_REQUIRED_RESULT;
  136.     QImage convertToFormat(Format f, const QVector<QRgb> &colorTable, Qt::ImageConversionFlags flags = Qt::AutoColor) const Q_REQUIRED_RESULT;
  137.     int width() const;
  138.     int height() const;
  139.     QSize size() const;
  140.     QRect rect() const;
  141.     int depth() const;
  142.     int numColors() const;
  143.     QRgb color(int i) const;
  144.     void setColor(int i, QRgb c);
  145.     void setNumColors(int);
  146.     bool allGray() const;
  147.     bool isGrayscale() const;
  148.     uchar *bits();
  149.     const uchar *bits() const;
  150.     int numBytes() const;
  151.     uchar *scanLine(int);
  152.     const uchar *scanLine(int) const;
  153.     int bytesPerLine() const;
  154.     bool valid(int x, int y) const;
  155.     bool valid(const QPoint &pt) const;
  156.     int pixelIndex(int x, int y) const;
  157.     int pixelIndex(const QPoint &pt) const;
  158.     QRgb pixel(int x, int y) const;
  159.     QRgb pixel(const QPoint &pt) const;
  160.     void setPixel(int x, int y, uint index_or_rgb);
  161.     void setPixel(const QPoint &pt, uint index_or_rgb);
  162.     QVector<QRgb> colorTable() const;
  163.     void setColorTable(const QVector<QRgb> colors);
  164.     void fill(uint pixel);
  165.     bool hasAlphaChannel() const;
  166.     void setAlphaChannel(const QImage &alphaChannel);
  167.     QImage alphaChannel() const;
  168.     QImage createAlphaMask(Qt::ImageConversionFlags flags = Qt::AutoColor) const;
  169. #ifndef QT_NO_IMAGE_HEURISTIC_MASK
  170.     QImage createHeuristicMask(bool clipTight = true) const;
  171. #endif
  172.     QImage createMaskFromColor(QRgb color, Qt::MaskMode mode = Qt::MaskInColor) const;
  173.     inline QImage scaled(int w, int h, Qt::AspectRatioMode aspectMode = Qt::IgnoreAspectRatio,
  174.                         Qt::TransformationMode mode = Qt::FastTransformation) const
  175.         { return scaled(QSize(w, h), aspectMode, mode); }
  176.     QImage scaled(const QSize &s, Qt::AspectRatioMode aspectMode = Qt::IgnoreAspectRatio,
  177.                  Qt::TransformationMode mode = Qt::FastTransformation) const;
  178.     QImage scaledToWidth(int w, Qt::TransformationMode mode = Qt::FastTransformation) const;
  179.     QImage scaledToHeight(int h, Qt::TransformationMode mode = Qt::FastTransformation) const;
  180.     QImage transformed(const QMatrix &matrix, Qt::TransformationMode mode = Qt::FastTransformation) const;
  181.     static QMatrix trueMatrix(const QMatrix &, int w, int h);
  182.     QImage transformed(const QTransform &matrix, Qt::TransformationMode mode = Qt::FastTransformation) const;
  183.     static QTransform trueMatrix(const QTransform &, int w, int h);
  184.     QImage mirrored(bool horizontally = false, bool vertically = true) const;
  185.     QImage rgbSwapped() const;
  186.     void invertPixels(InvertMode = InvertRgb);
  187.     bool load(QIODevice *device, const char* format);
  188.     bool load(const QString &fileName, const char* format=0);
  189.     bool loadFromData(const uchar *buf, int len, const char *format = 0);
  190.     inline bool loadFromData(const QByteArray &data, const char* aformat=0)
  191.         { return loadFromData(reinterpret_cast<const uchar *>(data.constData()), data.size(), aformat); }
  192.     bool save(const QString &fileName, const char* format=0, int quality=-1) const;
  193.     bool save(QIODevice *device, const char* format=0, int quality=-1) const;
  194.     static QImage fromData(const uchar *data, int size, const char *format = 0);
  195.     inline static QImage fromData(const QByteArray &data, const char *format = 0)
  196.         { return fromData(reinterpret_cast<const uchar *>(data.constData()), data.size(), format); }
  197.     int serialNumber() const;
  198.     qint64 cacheKey() const;
  199.     QPaintEngine *paintEngine() const;
  200.     // Auxiliary data
  201.     int dotsPerMeterX() const;
  202.     int dotsPerMeterY() const;
  203.     void setDotsPerMeterX(int);
  204.     void setDotsPerMeterY(int);
  205.     QPoint offset() const;
  206.     void setOffset(const QPoint&);
  207. #ifndef QT_NO_IMAGE_TEXT
  208.     QStringList textKeys() const;
  209.     QString text(const QString &key = QString()) const;
  210.     void setText(const QString &key, const QString &value);
  211.     // The following functions are obsolete as of 4.1
  212.     QString text(const char* key, const char* lang=0) const;
  213.     QList<QImageTextKeyLang> textList() const;
  214.     QStringList textLanguages() const;
  215.     QString text(const QImageTextKeyLang&) const;
  216.     void setText(const char* key, const char* lang, const QString&);
  217. #endif
  218. #ifdef QT3_SUPPORT
  219.     enum Endian { BigEndian, LittleEndian, IgnoreEndian };
  220.     QT3_SUPPORT_CONSTRUCTOR QImage(int width, int height, int depth, int numColors=0, Endian bitOrder=IgnoreEndian);
  221.     QT3_SUPPORT_CONSTRUCTOR QImage(const QSize&, int depth, int numColors=0, Endian bitOrder=IgnoreEndian);
  222.     QT3_SUPPORT_CONSTRUCTOR QImage(uchar *data, int w, int h, int depth, const QRgb *colortable, int numColors, Endian bitOrder);
  223. #ifdef Q_WS_QWS
  224.     QT3_SUPPORT_CONSTRUCTOR QImage(uchar *data, int w, int h, int depth, int pbl, const QRgb *colortable, int numColors, Endian bitOrder);
  225. #endif
  226.     inline QT3_SUPPORT Endian bitOrder() const {
  227.         Format f = format();
  228.         return f == Format_Mono ? BigEndian : (f == Format_MonoLSB ? LittleEndian : IgnoreEndian);
  229.     }
  230.     QT3_SUPPORT QImage convertDepth(int, Qt::ImageConversionFlags flags = Qt::AutoColor) const;
  231.     QT3_SUPPORT QImage convertDepthWithPalette(int, QRgb* p, int pc, Qt::ImageConversionFlags flags = Qt::AutoColor) const;
  232.     QT3_SUPPORT QImage convertBitOrder(Endian) const;
  233.     QT3_SUPPORT bool hasAlphaBuffer() const;
  234.     QT3_SUPPORT void setAlphaBuffer(bool);
  235.     QT3_SUPPORT uchar **jumpTable();
  236.     QT3_SUPPORT const uchar * const *jumpTable() const;
  237.     inline QT3_SUPPORT void reset() { *this = QImage(); }
  238.     static inline QT3_SUPPORT Endian systemByteOrder()
  239.         { return QSysInfo::ByteOrder == QSysInfo::BigEndian ? BigEndian : LittleEndian; }
  240.     inline QT3_SUPPORT QImage swapRGB() const { return rgbSwapped(); }
  241.     inline QT3_SUPPORT QImage mirror(bool horizontally = false, bool vertically = true) const
  242.         { return mirrored(horizontally, vertically); }
  243.     QT3_SUPPORT bool create(const QSize&, int depth, int numColors=0, Endian bitOrder=IgnoreEndian);
  244.     QT3_SUPPORT bool create(int width, int height, int depth, int numColors=0, Endian bitOrder=IgnoreEndian);
  245.     inline QT3_SUPPORT QImage xForm(const QMatrix &matrix) const { return transformed(QTransform(matrix)); }
  246.     inline QT3_SUPPORT QImage smoothScale(int w, int h, Qt::AspectRatioMode mode = Qt::IgnoreAspectRatio) const
  247.         { return scaled(QSize(w, h), mode, Qt::SmoothTransformation); }
  248.     inline QImage QT3_SUPPORT smoothScale(const QSize &s, Qt::AspectRatioMode mode = Qt::IgnoreAspectRatio) const
  249.         { return scaled(s, mode, Qt::SmoothTransformation); }
  250.     inline QT3_SUPPORT QImage scaleWidth(int w) const { return scaledToWidth(w); }
  251.     inline QT3_SUPPORT QImage scaleHeight(int h) const { return scaledToHeight(h); }
  252.     inline QT3_SUPPORT void invertPixels(bool invertAlpha) { invertAlpha ? invertPixels(InvertRgba) : invertPixels(InvertRgb); }
  253.     inline QT3_SUPPORT QImage copy(int x, int y, int w, int h, Qt::ImageConversionFlags) const
  254.         { return copy(QRect(x, y, w, h)); }
  255.     inline QT3_SUPPORT QImage copy(const QRect &rect, Qt::ImageConversionFlags) const
  256.         { return copy(rect); }
  257.     static QT3_SUPPORT Endian systemBitOrder();
  258.     inline QT3_SUPPORT_CONSTRUCTOR QImage(const QByteArray &data)
  259.         { d = 0; *this = QImage::fromData(data); }
  260. #endif
  261. protected:
  262.     virtual int metric(PaintDeviceMetric metric) const;
  263. private:
  264.     friend class QWSOnScreenSurface;
  265.     QImageData *d;
  266.     friend class QRasterPixmapData;
  267.     friend class QDetachedPixmap;
  268.     friend Q_GUI_EXPORT qint64 qt_image_id(const QImage &image);
  269.     friend const QVector<QRgb> *qt_image_colortable(const QImage &image);
  270. public:
  271.     typedef QImageData * DataPtr;
  272.     inline DataPtr &data_ptr() { return d; }
  273. };
  274. Q_DECLARE_SHARED(QImage)
  275. Q_DECLARE_TYPEINFO(QImage, Q_MOVABLE_TYPE);
  276. // Inline functions...
  277. Q_GUI_EXPORT_INLINE bool QImage::valid(const QPoint &pt) const { return valid(pt.x(), pt.y()); }
  278. Q_GUI_EXPORT_INLINE int QImage::pixelIndex(const QPoint &pt) const { return pixelIndex(pt.x(), pt.y());}
  279. Q_GUI_EXPORT_INLINE QRgb QImage::pixel(const QPoint &pt) const { return pixel(pt.x(), pt.y()); }
  280. Q_GUI_EXPORT_INLINE void QImage::setPixel(const QPoint &pt, uint index_or_rgb) { setPixel(pt.x(), pt.y(), index_or_rgb); }
  281. // QImage stream functions
  282. #if !defined(QT_NO_DATASTREAM)
  283. Q_GUI_EXPORT QDataStream &operator<<(QDataStream &, const QImage &);
  284. Q_GUI_EXPORT QDataStream &operator>>(QDataStream &, QImage &);
  285. #endif
  286. #ifdef QT3_SUPPORT
  287. Q_GUI_EXPORT QT3_SUPPORT void bitBlt(QImage* dst, int dx, int dy, const QImage* src,
  288.                                      int sx=0, int sy=0, int sw=-1, int sh=-1, Qt::ImageConversionFlags flags = Qt::AutoColor);
  289. #endif
  290. QT_END_NAMESPACE
  291. QT_END_HEADER
  292. #endif // QIMAGE_H