46 d->m_rectangle = region;
59 QImage image = pixmap.copy(d->m_rectangle).toImage();
61 const float sigma = 1.0 * value / 2.57;
62 const float deno = 1.0 / (sigma * sqrt(2.0 * M_PI));
63 const float nume = -1.0 / (2.0 * sigma * sigma);
65 float* gaussMatrix = (
float*)
malloc(
sizeof(
float)* (value + value + 1));
67 for(
int i = 0, x = -value; x <= value; ++x, ++i)
69 float g = deno * exp(1.0 * nume * x * x);
75 const int len = value + value + 1;
76 for(
int i = 0; i < len; ++i)
78 gaussMatrix[i] /= gaussSum;
81 const int width = image.width();
82 const int height = image.height();
83 int *pix = (
int*)image.bits();
84 int *rowData = (
int*)
malloc(width *
sizeof(
int));
85 int *listData = (
int*)
malloc(height *
sizeof(
int));
87 for(
int y = 0; y < height; ++y)
89 memcpy(rowData, pix + y * width,
sizeof(
int) *width);
91 for(
int x = 0; x < width; ++x)
93 float r = 0, g = 0, b = 0;
96 for(
int i = -value; i <= value; ++i)
100 if(0 <= k && k <= width)
102 int color = rowData[k];
103 int cr = (color & 0x00ff0000) >> 16;
104 int cg = (color & 0x0000ff00) >> 8;
105 int cb = (color & 0x000000ff);
107 r += cr * gaussMatrix[i + value];
108 g += cg * gaussMatrix[i + value];
109 b += cb * gaussMatrix[i + value];
111 gaussSum += gaussMatrix[i + value];
115 int cr = (
int)(r / gaussSum);
116 int cg = (
int)(g / gaussSum);
117 int cb = (
int)(b / gaussSum);
119 pix[y * width + x] = cr << 16 | cg << 8 | cb | 0xff000000;
123 for(
int x = 0; x < width; ++x)
125 for(
int y = 0; y < height; ++y)
127 listData[y] = pix[y * width + x];
130 for(
int y = 0; y < height; ++y)
132 float r = 0, g = 0, b = 0;
135 for(
int j = -value; j <= value; ++j)
139 if(0 <= k && k <= height)
141 int color = listData[k];
142 int cr = (color & 0x00ff0000) >> 16;
143 int cg = (color & 0x0000ff00) >> 8;
144 int cb = (color & 0x000000ff);
146 r += cr * gaussMatrix[j + value];
147 g += cg * gaussMatrix[j + value];
148 b += cb * gaussMatrix[j + value];
150 gaussSum += gaussMatrix[j + value];
154 int cr = (
int)(r / gaussSum);
155 int cg = (
int)(g / gaussSum);
156 int cb = (
int)(b / gaussSum);
158 pix[y * width + x] = cr << 16 | cg << 8 | cb | 0xff000000;
165 return QPixmap::fromImage(image);
181 bool isValid(
int index,
int value)
const;
199 m_row = ceil(height * 1.0 / 8);
204 if(index < 0 || index >
m_data.count())
209 return m_data[index] > value;
229 d->initialize(region.width(), region.height());
230 for(
int index = 0; index < d->count(); ++index)
239 QPixmap pix(d->m_rectangle.size());
241 pix.fill(Qt::transparent);
242 for(
int index = 0; index < d->count(); ++index)
244 QPainter painter(&pix);
246 const int row = index / 8;
247 const int column = index % 8;
249 QRect rect(QRect(row * d->m_column, column * d->m_row, d->m_column, d->m_row));
250 if(rect.y() + rect.height() > pixmap.height())
252 rect.setHeight(pixmap.height() - rect.y());
255 if(d->isValid(index, value))
257 painter.fillRect(rect, QColor(0xFF, 0xFF, 0xFF, 255 - 2.55 * value));
260 painter.setCompositionMode(QPainter::CompositionMode_SourceOut);
261 painter.drawPixmap(rect, pixmap.copy(rect));
280 void initialize(
const QImage &image,
int radius);
390 const int diameter = (m_sourceRadius << 1) + 1;
391 const int rate = m_sourceRadius / value;
392 const int size = diameter * diameter;
397 for(
int x = 0; x <= diameter; ++x)
399 for(
int y = 0; y <= diameter; ++y)
401 const int distanceSquare = (m_sourceRadius - x) * (m_sourceRadius - x) + (m_sourceRadius - y) * (m_sourceRadius - y);
402 if(distanceSquare <= value)
423 for(
int i = 0; i <
size; ++i)
432 for(
int i =
m_width; i < length; ++i)
447 for(
int y = 1; y <
m_height - 1; ++y)
449 for(
int x = 0; x <
m_width; ++x, ++w)
452 if(w + offset > 0 && w + offset < m_width * m_height)
469 d->initialize(image, radius);
477 d->setWaveSourcePosition(region.width() / 2, region.height() / 2);
485 QImage image = pixmap.toImage();
486 memcpy(image.bits(), (
const uchar*)d->data(),
QtImageBytes(image));
488 QPixmap pix(d->m_rectangle.size());
489 pix.fill(Qt::transparent);
491 QPainter painter(&pix);
492 painter.fillRect(d->m_rectangle, QColor(0xFF, 0xFF, 0xFF, qMin(2.55 * 2 * value, 255.0)));
493 painter.setCompositionMode(QPainter::CompositionMode_SourceIn);
494 painter.drawPixmap(d->m_rectangle, QPixmap::fromImage(image));
#define TTKStaticCast(x, y)
#define QtImageBytes(p)
Image byte count.
The class of the sharpe image.
The class of the water wave.
WaterWave(const QImage &image, int radius)
The class of the water wave private.
virtual void input(const QRect ®ion)
typedef int(ZCALLBACK *close_file_func) OF((voidpf opaque
virtual QPixmap render(const QPixmap &pixmap, int value) overridefinal
The namespace of the algorithm.
void initialize(const QImage &image, int radius)
#define TTK_INIT_PRIVATE_D(PVT)
void setWaveSourcePower(int radius, int depth)
virtual QPixmap render(const QPixmap &pixmap, int value) overridefinal
#define TTK_CREATE_PRIVATE(Class)
The class of the sharpe image private.
virtual void input(const QRect ®ion) overridefinal
virtual QPixmap render(const QPixmap &pixmap, int value) overridefinal
The class of the cube wave.
void setWaveSourcePosition(int x, int y)
virtual void input(const QRect ®ion) overridefinal
The class of the ttk private base.
void initialize(int width, int height)
bool isValid(int index, int value) const
The class of the cube wave private.