You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
170 lines
4.5 KiB
170 lines
4.5 KiB
/***************************************************************************
|
|
qsimage.h
|
|
-------------------
|
|
begin : 01-January-2000
|
|
copyright : (C) 2000 by Kamil Dobkowski
|
|
email : kamildobk@poczta.onet.pl
|
|
***************************************************************************/
|
|
|
|
/***************************************************************************
|
|
* *
|
|
* This program is free software; you can redistribute it and/or modify *
|
|
* it under the terms of the GNU General Public License as published by *
|
|
* the Free Software Foundation; either version 2 of the License, or *
|
|
* (at your option) any later version. *
|
|
* *
|
|
***************************************************************************/
|
|
|
|
|
|
#ifndef QSIMAGE_H
|
|
#define QSIMAGE_H
|
|
|
|
#ifdef HAVE_CONFIG_H
|
|
#include <config.h>
|
|
#endif
|
|
#include"qsaxes.h"
|
|
#include"qsplot.h"
|
|
#include"qsdrv.h"
|
|
|
|
|
|
|
|
/**
|
|
* \brief Dataset: Draws pixmaps
|
|
*
|
|
* Data format is described in QSImage::Channels . See also QSAxes::plotAdd() .
|
|
* @author Kamil Dobkowski
|
|
*/
|
|
class QSImage : public QSPlot2D
|
|
{
|
|
Q_OBJECT
|
|
Q_PROPERTY( bool rawMode READ rawMode WRITE setRawMode )
|
|
Q_PROPERTY( bool useGradient READ useGradient WRITE setUseGradient )
|
|
|
|
public:
|
|
/**
|
|
* Descriptive names of data channels. See QSData::setMatrix().
|
|
* DataRed is required, other matrices are optional. DataRed, DataIndex, DataGray are the different names
|
|
* for the same channel. DataRed, DataGreen, DataBlue must have the same size.
|
|
* XVector ( optional ) contains x coordinates of a grid, YVector ( optional ) contains y coordinates of a grid.
|
|
* cols(XVector) == cols(DataRed)+1, rows(YVector) == rows(DataRed)+1, both vectors must be monotone.
|
|
*/
|
|
enum Channels {
|
|
XVector = 0, // Row vector, monotone. Size w+1 x 1
|
|
YVector = 1, // Column vector, monotone. Size 1 x h+1
|
|
DataRed = 2, // 2 Matrix. Size: w x h ( size is width x height ).
|
|
DataIndex = 2, // 2
|
|
DataGray = 2, // 2
|
|
DataGreen = 3, // Matrix. Size w x h
|
|
DataBlue = 4, // Matrix. Size w x h
|
|
Palette = 5 // Matrix. Size 3 x ?
|
|
};
|
|
/**
|
|
* Constructor.
|
|
*/
|
|
QSImage(QSAxes* parent, const char * name=0);
|
|
/**
|
|
* Destructor.
|
|
*/
|
|
~QSImage();
|
|
/**
|
|
* Sets the raw mode. In the raw mode the value axis has
|
|
* fixed range 0-255, and there is no mapping of data values
|
|
* to the axis.
|
|
*/
|
|
void setRawMode( bool enabled );
|
|
/**
|
|
* Returns the current state of the raw mode setting.
|
|
*/
|
|
bool rawMode() const { return m_rawmode; }
|
|
/**
|
|
* Use gradient instead of gray levels
|
|
*/
|
|
void setUseGradient( bool enable );
|
|
/**
|
|
* if using gradient
|
|
*/
|
|
bool useGradient() const { return m_use_gradient; }
|
|
|
|
virtual QString posInfo( QSPt2f& pos );
|
|
virtual bool isClicked( const QSPt2f& pos );
|
|
virtual QSPt2f legendItemSize( QSDrv *drv );
|
|
virtual void drawLegendItem( const QSPt2f& pos, QSDrv *drv );
|
|
virtual void loadStateFromStream( QDataStream& stream, QSObjectFactory *factory );
|
|
virtual void saveStateToStream( QDataStream& stream, QSObjectFactory *factory );
|
|
virtual ColumnType columnType( int channel, int column ) const;
|
|
virtual QString channelVariable( int channel ) const;
|
|
|
|
protected:
|
|
|
|
virtual void dataChanged( int channel = -1 );
|
|
virtual void allocRuntimeData();
|
|
virtual void freeRuntimeData();
|
|
virtual bool getAxisRange( QSAxis *axis, double& min, double& max );
|
|
virtual bool start();
|
|
virtual bool step();
|
|
virtual void end();
|
|
|
|
private:
|
|
|
|
bool m_evalid;
|
|
bool m_rawmode;
|
|
bool m_use_gradient;
|
|
double m_dmin;
|
|
double m_dmax;
|
|
unsigned char m_r;
|
|
unsigned char m_g;
|
|
unsigned char m_b;
|
|
unsigned char *m_ptr;
|
|
struct image_runtime_data;
|
|
struct image_runtime_data *d;
|
|
|
|
bool init_buffers();
|
|
bool clip_rect( QSPt2& p1, QSPt2& p2 );
|
|
void set_rgb( unsigned char* ptr, int x_index, int y_index );
|
|
};
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|