本文整理汇总了C++中qGreen函数的典型用法代码示例。如果您正苦于以下问题:C++ qGreen函数的具体用法?C++ qGreen怎么用?C++ qGreen使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了qGreen函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: p
void GLWidget::draw()
{
QPainter p(this); // used for text overlay
// save the GL state set for QPainter
p.beginNativePainting();
saveGLState();
// render the 'bubbles.svg' file into our pbuffer
QPainter pbuffer_painter(pbuffer);
svg_renderer->render(&pbuffer_painter);
pbuffer_painter.end();
glFlush();
// rendering directly to a texture is not supported on X11 and
// some Windows implementations, unfortunately
if (!hasDynamicTextureUpdate)
pbuffer->updateDynamicTexture(dynamicTexture);
makeCurrent();
// draw into the GL widget
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glFrustum(-1, 1, -1, 1, 10, 100);
glTranslatef(0.0f, 0.0f, -15.0f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glViewport(0, 0, width(), height());
glBindTexture(GL_TEXTURE_2D, dynamicTexture);
glEnable(GL_TEXTURE_2D);
glEnable(GL_MULTISAMPLE);
glEnable(GL_CULL_FACE);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
// draw background
glPushMatrix();
glScalef(1.7f, 1.7f, 1.7f);
glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
glCallList(tile_list);
glPopMatrix();
const int w = logo.width();
const int h = logo.height();
glRotatef(rot_x, 1.0f, 0.0f, 0.0f);
glRotatef(rot_y, 0.0f, 1.0f, 0.0f);
glRotatef(rot_z, 0.0f, 0.0f, 1.0f);
glScalef(scale/w, scale/w, scale/w);
glDepthFunc(GL_LESS);
glEnable(GL_DEPTH_TEST);
// draw the Qt icon
glTranslatef(-w+1, -h+1, 0.0f);
for (int y=h-1; y>=0; --y) {
uint *p = (uint*) logo.scanLine(y);
uint *end = p + w;
int x = 0;
while (p < end) {
glColor4ub(qRed(*p), qGreen(*p), qBlue(*p), uchar(qAlpha(*p)*.9));
glTranslatef(0.0f, 0.0f, wave[y*w+x]);
if (qAlpha(*p) > 128)
glCallList(tile_list);
glTranslatef(0.0f, 0.0f, -wave[y*w+x]);
glTranslatef(2.0f, 0.0f, 0.0f);
++x;
++p;
}
glTranslatef(-w*2.0f, 2.0f, 0.0f);
}
// restore the GL state that QPainter expects
restoreGLState();
p.endNativePainting();
// draw the overlayed text using QPainter
p.setPen(QColor(197, 197, 197, 157));
p.setBrush(QColor(197, 197, 197, 127));
p.drawRect(QRect(0, 0, width(), 50));
p.setPen(Qt::black);
p.setBrush(Qt::NoBrush);
const QString str1(tr("A simple OpenGL pbuffer example."));
const QString str2(tr("Use the mouse wheel to zoom, press buttons and move mouse to rotate, double-click to flip."));
QFontMetrics fm(p.font());
p.drawText(width()/2 - fm.width(str1)/2, 20, str1);
p.drawText(width()/2 - fm.width(str2)/2, 20 + fm.lineSpacing(), str2);
}
示例2: qGreen
bool QgsHttpRequestHandler::greenCompare( QPair<QRgb, int> c1, QPair<QRgb, int> c2 )
{
return qGreen( c1.first ) < qGreen( c2.first );
}
示例3: int
void ImageOperations::featureScale( const OpGrayImage& img,
OpGrayImage& imgRet )
{
QImage qimg = img.getQtImage();
QImage qimgRet;
qimgRet.create(qimg.width()/2, qimg.height()/2, 32);
for( int y=0; y<qimg.height(); y+=2 )
{
for( int x=0; x<qimg.width(); x+=2 )
{
if( (int(x/2) < qimgRet.width()) && (int(y/2) < qimgRet.height()))
{
if( (qRed (qimg.pixel(x,y)) == 0) && // If pixel in
(qGreen(qimg.pixel(x,y)) == 0) && // image contains feature
(qBlue (qimg.pixel(x,y)) == 0))
{ // set in scaled
qimgRet.setPixel(int(x/2), int(y/2), qRgb(0,0,0));
}
else
{
if ((x < qimg.width()-1) && // Else, if pixel
((qRed (qimg.pixel(x+1,y)) == 0) && // to the right
(qGreen(qimg.pixel(x+1,y)) == 0) && // contains feature
(qBlue (qimg.pixel(x+1,y)) == 0)))
{ // set in scaled.
qimgRet.setPixel(int(x/2), int(y/2), qRgb(0,0,0));
}
else
{
if( (y < qimg.height()-1) && // Else if pixel
((qRed (qimg.pixel(x,y+1)) == 0) && // below contains
(qGreen(qimg.pixel(x,y+1)) == 0) && // feature, set
(qBlue (qimg.pixel(x,y+1)) == 0)))
{ // in scaled.
qimgRet.setPixel(int(x/2), int(y/2), qRgb(0,0,0));
}
else
{ // Else if pixel
if( ((x < qimg.width()-1) && // to the right
(y < qimg.height()-1)) && // and below
((qRed (qimg.pixel(x,y+1)) == 0) && // contains
(qGreen(qimg.pixel(x,y+1)) == 0) && // feature, set
(qBlue (qimg.pixel(x,y+1)) == 0)))
{ // it in scaled.
qimgRet.setPixel(int(x/2), int(y/2), qRgb(0,0,0));
}
else
{ // Else set
qimgRet.setPixel(int(x/2), int(y/2), // non-feature in
qRgb(255,255,255)); // scaled.
}
}
}
}
}
}
}
OpGrayImage tmp(qimgRet);
imgRet = tmp;
}
示例4: fadeInSpeed
void RGBMatrix::updateMapChannels(const RGBMap& map, const FixtureGroup* grp)
{
quint32 mdAssigned = QLCChannel::invalid();
quint32 mdFxi = Fixture::invalidId();
uint fadeTime = 0;
if (overrideFadeInSpeed() == defaultSpeed())
fadeTime = fadeInSpeed();
else
fadeTime = overrideFadeInSpeed();
// Create/modify fade channels for ALL pixels in the color map.
for (int y = 0; y < map.size(); y++)
{
for (int x = 0; x < map[y].size(); x++)
{
QLCPoint pt(x, y);
GroupHead grpHead(grp->head(pt));
Fixture* fxi = doc()->fixture(grpHead.fxi);
if (fxi == NULL)
continue;
if (grpHead.fxi != mdFxi)
{
mdAssigned = QLCChannel::invalid();
mdFxi = grpHead.fxi;
}
QLCFixtureHead head = fxi->head(grpHead.head);
QVector <quint32> rgb = head.rgbChannels();
QVector <quint32> cmy = head.cmyChannels();
if (rgb.size() == 3)
{
// RGB color mixing
FadeChannel fc;
fc.setFixture(doc(), grpHead.fxi);
fc.setChannel(rgb.at(0));
fc.setTarget(qRed(map[y][x]));
insertStartValues(fc, fadeTime);
m_fader->add(fc);
fc.setChannel(rgb.at(1));
fc.setTarget(qGreen(map[y][x]));
insertStartValues(fc, fadeTime);
m_fader->add(fc);
fc.setChannel(rgb.at(2));
fc.setTarget(qBlue(map[y][x]));
insertStartValues(fc, fadeTime);
m_fader->add(fc);
}
else if (cmy.size() == 3)
{
// CMY color mixing
QColor col(map[y][x]);
FadeChannel fc;
fc.setFixture(doc(), grpHead.fxi);
fc.setChannel(cmy.at(0));
fc.setTarget(col.cyan());
insertStartValues(fc, fadeTime);
m_fader->add(fc);
fc.setChannel(cmy.at(1));
fc.setTarget(col.magenta());
insertStartValues(fc, fadeTime);
m_fader->add(fc);
fc.setChannel(cmy.at(2));
fc.setTarget(col.yellow());
insertStartValues(fc, fadeTime);
m_fader->add(fc);
}
if (head.masterIntensityChannel() != QLCChannel::invalid())
{
//qDebug() << "RGBMatrix: found dimmer at" << head.masterIntensityChannel();
// Simple intensity (dimmer) channel
QColor col(map[y][x]);
FadeChannel fc;
fc.setFixture(doc(), grpHead.fxi);
fc.setChannel(head.masterIntensityChannel());
if (col.value() == 0 && mdAssigned != head.masterIntensityChannel())
fc.setTarget(0);
else
{
fc.setTarget(255);
if (mdAssigned == QLCChannel::invalid())
mdAssigned = head.masterIntensityChannel();
}
insertStartValues(fc, fadeTime);
m_fader->add(fc);
}
}
}
}
示例5: write_pbm_image
static bool write_pbm_image(QIODevice *out, const QImage &sourceImage, const QByteArray &sourceFormat)
{
QByteArray str;
QImage image = sourceImage;
QByteArray format = sourceFormat;
format = format.left(3); // ignore RAW part
bool gray = format == "pgm";
if (format == "pbm") {
image = image.convertToFormat(QImage::Format_Mono);
} else if (image.depth() == 1) {
image = image.convertToFormat(QImage::Format_Indexed8);
} else {
switch (image.format()) {
case QImage::Format_RGB16:
case QImage::Format_RGB666:
case QImage::Format_RGB555:
case QImage::Format_RGB888:
case QImage::Format_RGB444:
image = image.convertToFormat(QImage::Format_RGB32);
break;
case QImage::Format_ARGB8565_Premultiplied:
case QImage::Format_ARGB6666_Premultiplied:
case QImage::Format_ARGB8555_Premultiplied:
case QImage::Format_ARGB4444_Premultiplied:
image = image.convertToFormat(QImage::Format_ARGB32);
break;
default:
break;
}
}
if (image.depth() == 1 && image.colorCount() == 2) {
if (qGray(image.color(0)) < qGray(image.color(1))) {
// 0=dark/black, 1=light/white - invert
image.detach();
for (int y=0; y<image.height(); y++) {
uchar *p = image.scanLine(y);
uchar *end = p + image.bytesPerLine();
while (p < end)
*p++ ^= 0xff;
}
}
}
uint w = image.width();
uint h = image.height();
str = "P\n";
str += QByteArray::number(w);
str += ' ';
str += QByteArray::number(h);
str += '\n';
switch (image.depth()) {
case 1: {
str.insert(1, '4');
if (out->write(str, str.length()) != str.length())
return false;
w = (w+7)/8;
for (uint y=0; y<h; y++) {
uchar* line = image.scanLine(y);
if (w != (uint)out->write((char*)line, w))
return false;
}
}
break;
case 8: {
str.insert(1, gray ? '5' : '6');
str.append("255\n");
if (out->write(str, str.length()) != str.length())
return false;
QVector<QRgb> color = image.colorTable();
uint bpl = w*(gray ? 1 : 3);
uchar *buf = new uchar[bpl];
for (uint y=0; y<h; y++) {
uchar *b = image.scanLine(y);
uchar *p = buf;
uchar *end = buf+bpl;
if (gray) {
while (p < end) {
uchar g = (uchar)qGray(color[*b++]);
*p++ = g;
}
} else {
while (p < end) {
QRgb rgb = color[*b++];
*p++ = qRed(rgb);
*p++ = qGreen(rgb);
*p++ = qBlue(rgb);
}
}
if (bpl != (uint)out->write((char*)buf, bpl))
return false;
}
delete [] buf;
}
break;
//.........这里部分代码省略.........
示例6: importProgress
bool VoxelTree::readFromSquareARGB32Pixels(const char* filename) {
emit importProgress(0);
int minAlpha = INT_MAX;
QImage pngImage = QImage(filename);
for (int i = 0; i < pngImage.width(); ++i) {
for (int j = 0; j < pngImage.height(); ++j) {
minAlpha = std::min(qAlpha(pngImage.pixel(i, j)) , minAlpha);
}
}
int maxSize = std::max(pngImage.width(), pngImage.height());
int scale = 1;
while (maxSize > scale) {scale *= 2;}
float size = 1.0f / scale;
emit importSize(size * pngImage.width(), 1.0f, size * pngImage.height());
QRgb pixel;
int minNeighborhoodAlpha;
for (int i = 0; i < pngImage.width(); ++i) {
for (int j = 0; j < pngImage.height(); ++j) {
emit importProgress((100 * (i * pngImage.height() + j)) /
(pngImage.width() * pngImage.height()));
pixel = pngImage.pixel(i, j);
minNeighborhoodAlpha = qAlpha(pixel) - 1;
if (i != 0) {
minNeighborhoodAlpha = std::min(minNeighborhoodAlpha, qAlpha(pngImage.pixel(i - 1, j)));
}
if (j != 0) {
minNeighborhoodAlpha = std::min(minNeighborhoodAlpha, qAlpha(pngImage.pixel(i, j - 1)));
}
if (i < pngImage.width() - 1) {
minNeighborhoodAlpha = std::min(minNeighborhoodAlpha, qAlpha(pngImage.pixel(i + 1, j)));
}
if (j < pngImage.height() - 1) {
minNeighborhoodAlpha = std::min(minNeighborhoodAlpha, qAlpha(pngImage.pixel(i, j + 1)));
}
while (qAlpha(pixel) > minNeighborhoodAlpha) {
++minNeighborhoodAlpha;
createVoxel(i * size,
(minNeighborhoodAlpha - minAlpha) * size,
j * size,
size,
qRed(pixel),
qGreen(pixel),
qBlue(pixel),
true);
}
}
}
emit importProgress(100);
return true;
}
示例7: renderWatermark
void renderWatermark(QImage & image, const QString & wmText, const QFont & wmFont, const unsigned int wmOpacity, double pA, double pB, double pC, double pD)
{
const double pi = 3.14159265358979323846;
double w = ((double)image.width() - pA);
double h = ((double)image.height() - pB);
double theta = (pi/-2.0) + atan(w / h);
double l = sqrt((w * w) + (h * h));
const double sintheta = sin(theta);
const double costheta = cos(theta);
double margin_width = pC;
double margin_height = pD;
int offset = (int)(l * 0.05);
int l2 = (int)(l * 0.9);
int x = (int)(sintheta * h) + offset;
int y = (int)(costheta * h);
QFont fnt = wmFont;
QFontMetrics fm = QFontMetrics(fnt);
QFontInfo fi(fnt);
QString family = fi.family();
QList<int> sizes = QFontDatabase().pointSizes(family);
qSort(sizes);
for(int i = sizes.size() - 1; i > 0; i--)
{
fnt.setPointSize(sizes[i]);
fm = QFontMetrics(fnt);
if(fm.boundingRect(wmText).width() < l2)
break;
}
int fh = fm.height();
y = y - (fh/2);
//NB QPixmap not safe outside of main thread, using QImage instead
QImage wm(image.width(), image.height(), QImage::Format_RGB32);
wm.fill(0xFFFFFFFF);
QPainter pPainter;
pPainter.begin(&wm);
pPainter.setFont(fnt);
pPainter.translate(margin_width, margin_height);
pPainter.rotate((theta/pi)*180);
pPainter.drawText(x, y, l2, fh, Qt::AlignCenter, wmText);
pPainter.end();
double opacity = wmOpacity / 255.0;
double opacity_inv = 1.0 - opacity;
QRgb s = 0;
QRgb d = 0;
for(y = 0; y < image.height(); y++) {
for(x = 0; x < image.width(); x++) {
s = wm.pixel(x, y);
if((s & 0x00ffffff) == 0x00ffffff) continue; // if it's white just skip it
d = image.pixel(x, y);
image.setPixel(x, y, qRgb( (int)((qRed(s) * opacity) + (qRed(d) * opacity_inv)),
(int)((qGreen(s) * opacity) + (qGreen(d) * opacity_inv)),
(int)((qBlue(s) * opacity) + (qBlue(d) * opacity_inv)) ));
}
}
}
示例8: pmckey
QPixmap MIconEngine::pixmap(const QSize &size, QIcon::Mode mode, QIcon::State state)
{
QPixmap pm;
QString pmckey(d->pmcKey(size, mode, state));
if (QPixmapCache::find(pmckey, pm))
return pm;
if (d->addedPixmaps) {
pm = d->addedPixmaps->value(d->hashKey(mode, state));
if (!pm.isNull() && pm.size() == size)
return pm;
}
QSvgRenderer renderer;
d->loadDataForModeAndState(&renderer, mode, state);
if (!renderer.isValid())
return pm;
QSize actualSize = renderer.defaultSize();
if (!actualSize.isNull())
actualSize.scale(size, Qt::KeepAspectRatio);
QImage img(actualSize, QImage::Format_ARGB32);
img.fill(0x00000000);
QPainter p(&img);
renderer.render(&p);
p.end();
bool light = Ms::preferences.globalStyle == Ms::STYLE_LIGHT;
int ww = img.width();
if (state == QIcon::On) {
if (light) {
for (int y = 0; y < img.height(); ++y) {
QRgb *scanLine = (QRgb*)img.scanLine(y);
for (int x = 0; x < img.width(); ++x) {
QRgb pixel = *scanLine;
int alpha = qAlpha(pixel);
if (alpha < 0)
alpha = 0;
*scanLine = qRgba(qRed(255-pixel), qGreen(255-pixel), qBlue(255-pixel), alpha);
++scanLine;
}
}
}
else {
for (int y = 0; y < img.height(); ++y) {
quint32* p = (quint32*)img.scanLine(y);
for (int x = 0; x < ww; ++x) {
if (*p & 0xff000000) {
int d = 0xff - (*p & 0xff);
int dd = 50;
QColor color(QColor::fromRgba(*p));
int r = 70 - d + dd;
if (r < 0)
r = 0;
int g = 130 - d + dd;
if (g < 0)
g = 0;
int b = 180 - d + dd;
if (b < 0)
b = 0;
QColor nc = QColor(r, g, b, color.alpha());
*p = nc.rgba();
}
++p;
}
}
}
}
else {
// change alpha channel
int delta = 51;
if (mode == QIcon::Disabled)
delta = 178;
else if (state == QIcon::On)
delta = 0;
if (light) {
for (int y = 0; y < img.height(); ++y) {
QRgb *scanLine = (QRgb*)img.scanLine(y);
for (int x = 0; x < img.width(); ++x) {
QRgb pixel = *scanLine;
int alpha = qAlpha(pixel) - delta;
if (alpha < 0)
alpha = 0;
*scanLine = qRgba(qRed(255-pixel), qGreen(255-pixel), qBlue(255-pixel), alpha);
++scanLine;
}
}
}
else {
for (int y = 0; y < img.height(); ++y) {
QRgb *scanLine = (QRgb*)img.scanLine(y);
for (int x = 0; x < img.width(); ++x) {
QRgb pixel = *scanLine;
int alpha = qAlpha(pixel) - delta;
if (alpha < 0)
alpha = 0;
*scanLine = qRgba(qRed(pixel), qGreen(pixel), qBlue(pixel), alpha);
//.........这里部分代码省略.........
示例9: Q_UNUSED
QgsRasterBlock * QgsBrightnessContrastFilter::block( int bandNo, QgsRectangle const & extent, int width, int height )
{
Q_UNUSED( bandNo );
QgsDebugMsg( QString( "width = %1 height = %2 extent = %3" ).arg( width ).arg( height ).arg( extent.toString() ) );
QgsRasterBlock *outputBlock = new QgsRasterBlock();
if ( !mInput )
{
return outputBlock;
}
// At this moment we know that we read rendered image
int bandNumber = 1;
QgsRasterBlock *inputBlock = mInput->block( bandNumber, extent, width, height );
if ( !inputBlock || inputBlock->isEmpty() )
{
QgsDebugMsg( "No raster data!" );
delete inputBlock;
return outputBlock;
}
if ( mBrightness == 0 && mContrast == 0 )
{
QgsDebugMsg( "No brightness changes." );
delete outputBlock;
return inputBlock;
}
if ( !outputBlock->reset( QGis::ARGB32_Premultiplied, width, height ) )
{
delete inputBlock;
return outputBlock;
}
// adjust image
QRgb myNoDataColor = qRgba( 0, 0, 0, 0 );
QRgb myColor;
int r, g, b, alpha;
double f = qPow(( mContrast + 100 ) / 100.0, 2 );
for ( qgssize i = 0; i < ( qgssize )width*height; i++ )
{
if ( inputBlock->color( i ) == myNoDataColor )
{
outputBlock->setColor( i, myNoDataColor );
continue;
}
myColor = inputBlock->color( i );
alpha = qAlpha( myColor );
r = adjustColorComponent( qRed( myColor ), alpha, mBrightness, f );
g = adjustColorComponent( qGreen( myColor ), alpha, mBrightness, f );
b = adjustColorComponent( qBlue( myColor ), alpha, mBrightness, f );
outputBlock->setColor( i, qRgba( r, g, b, alpha ) );
}
delete inputBlock;
return outputBlock;
}
示例10: refresh_image
void refresh_image( producer_qimage self, mlt_frame frame, mlt_image_format format, int width, int height )
{
// Obtain properties of frame and producer
mlt_properties properties = MLT_FRAME_PROPERTIES( frame );
mlt_producer producer = &self->parent;
// Get index and qimage
int image_idx = refresh_qimage( self, frame );
// optimization for subsequent iterations on single pictur
if ( image_idx != self->image_idx || width != self->current_width || height != self->current_height )
self->current_image = NULL;
// If we have a qimage and need a new scaled image
if ( self->qimage && ( !self->current_image || ( format != mlt_image_none && format != self->format ) ) )
{
QString interps = mlt_properties_get( properties, "rescale.interp" );
bool interp = ( interps != "nearest" ) && ( interps != "none" );
QImage *qimage = static_cast<QImage*>( self->qimage );
// Note - the original qimage is already safe and ready for destruction
if ( qimage->depth() == 1 )
{
QImage temp = qimage->convertToFormat( QImage::Format_RGB32 );
delete qimage;
qimage = new QImage( temp );
self->qimage = qimage;
}
QImage scaled = interp? qimage->scaled( QSize( width, height ) ) :
qimage->scaled( QSize(width, height), Qt::IgnoreAspectRatio, Qt::SmoothTransformation );
int has_alpha = scaled.hasAlphaChannel();
// Store width and height
self->current_width = width;
self->current_height = height;
// Allocate/define image
int dst_stride = width * ( has_alpha ? 4 : 3 );
int image_size = dst_stride * ( height + 1 );
self->current_image = ( uint8_t * )mlt_pool_alloc( image_size );
self->current_alpha = NULL;
self->format = has_alpha ? mlt_image_rgb24a : mlt_image_rgb24;
// Copy the image
int y = self->current_height + 1;
uint8_t *dst = self->current_image;
while ( --y )
{
QRgb *src = (QRgb*) scaled.scanLine( self->current_height - y );
int x = self->current_width + 1;
while ( --x )
{
*dst++ = qRed(*src);
*dst++ = qGreen(*src);
*dst++ = qBlue(*src);
if ( has_alpha ) *dst++ = qAlpha(*src);
++src;
}
}
// Convert image to requested format
if ( format != mlt_image_none && format != self->format )
{
uint8_t *buffer = NULL;
// First, set the image so it can be converted when we get it
mlt_frame_replace_image( frame, self->current_image, self->format, width, height );
mlt_frame_set_image( frame, self->current_image, image_size, mlt_pool_release );
self->format = format;
// get_image will do the format conversion
mlt_frame_get_image( frame, &buffer, &format, &width, &height, 0 );
// cache copies of the image and alpha buffers
if ( buffer )
{
image_size = mlt_image_format_size( format, width, height, NULL );
self->current_image = (uint8_t*) mlt_pool_alloc( image_size );
memcpy( self->current_image, buffer, image_size );
}
if ( ( buffer = mlt_frame_get_alpha_mask( frame ) ) )
{
self->current_alpha = (uint8_t*) mlt_pool_alloc( width * height );
memcpy( self->current_alpha, buffer, width * height );
}
}
// Update the cache
mlt_cache_item_close( self->image_cache );
mlt_service_cache_put( MLT_PRODUCER_SERVICE( producer ), "qimage.image", self->current_image, image_size, mlt_pool_release );
self->image_cache = mlt_service_cache_get( MLT_PRODUCER_SERVICE( producer ), "qimage.image" );
self->image_idx = image_idx;
mlt_cache_item_close( self->alpha_cache );
self->alpha_cache = NULL;
if ( self->current_alpha )
{
mlt_service_cache_put( MLT_PRODUCER_SERVICE( producer ), "qimage.alpha", self->current_alpha, width * height, mlt_pool_release );
self->alpha_cache = mlt_service_cache_get( MLT_PRODUCER_SERVICE( producer ), "qimage.alpha" );
}
}
//.........这里部分代码省略.........
示例11: settings
void CSettings::read()
{
QSettings settings(qApp->applicationDirPath() + "/settnig.ini", QSettings::IniFormat) ;
qDebug() << "readRootSetting\n" << settings.allKeys() ;
qDebug() << "file:" << qApp->applicationDirPath() + "/settnig.ini" ;
settings.beginGroup("Global");
#if defined(Q_OS_WIN32)
m_fileOpenDir = settings.value("cur_dir", QString(".\\")).toString() ;
#elif defined(Q_OS_MAC)
m_fileOpenDir = settings.value("cur_dir", QString("/Users/")).toString() ;
#elif defined(Q_OS_LINUX)
m_fileOpenDir = settings.value("cur_dir", QString("/home/")).toString() ;
#else
#error OSが定義されてないよ
#endif
m_fileSaveDir = settings.value("save_dir", m_fileOpenDir).toString() ;
m_pngSaveDir = settings.value("png_dir", m_fileOpenDir).toString() ;
m_jsonSaveDir = settings.value("json_dir", m_fileOpenDir).toString() ;
m_asmSaveDir = settings.value("asm_dir", m_fileOpenDir).toString() ;
QRgb col_anm = settings.value("anime_color", 0).toUInt() ;
QRgb col_img = settings.value("image_color", 0).toUInt() ;
m_animeBGColor = QColor(qRed(col_anm), qGreen(col_anm), qBlue(col_anm), qAlpha(col_anm)) ;
m_imageBGColor = QColor(qRed(col_img), qGreen(col_img), qBlue(col_img), qAlpha(col_img)) ;
m_bSaveImage = settings.value("save_image", false).toBool() ;
m_bFlat = settings.value("save_flat_json", false).toBool() ;
m_bLayerHierarchy = settings.value("layer_hierarchy", false).toBool() ;
m_frameStart = settings.value("frame_start", 0).toInt() ;
m_frameEnd = settings.value("frame_end", 30).toInt() ;
m_bBackup = settings.value("backup", false).toBool() ;
m_backupNum = settings.value("backup_num", 1).toInt() ;
settings.endGroup();
settings.beginGroup("MainWindow");
m_mainWindowGeometry = settings.value("geometry").toByteArray() ;
m_mainWindowState = settings.value("state").toByteArray() ;
settings.endGroup();
settings.beginGroup("AnimationWindow");
m_anmWindowGeometry = settings.value("geometry").toByteArray() ;
m_bUseBackImage = settings.value("use_back_image", false).toBool() ;
m_backImagePath = settings.value("back_image", "").toString() ;
m_bDrawFrame = settings.value("disp_frame", true).toBool() ;
m_bDrawCenter = settings.value("disp_center", false).toBool() ;
m_anmWindowTreeWidth = settings.value("tree_width", -1).toInt() ;
m_anmWindowTreeWidthIndex = settings.value("tree_width_idx", -1).toInt() ;
m_anmWindowScreenW = settings.value("scr_w", 0).toInt() ;
m_anmWindowScreenH = settings.value("scr_h", 0).toInt() ;
m_anmWindowW = settings.value("win_w", 2048).toInt() ;
m_anmWindowH = settings.value("win_h", 2048).toInt() ;
m_bUseDepthTest = settings.value("use_depth_test", true).toBool() ;
m_bUseZSort = settings.value("use_zsort", true).toBool() ;
m_bCheckGrid = settings.value("check_grid", true).toBool() ;
m_bCheckLinearFilter = settings.value("check_linear_filter", false).toBool() ;
settings.endGroup();
settings.beginGroup("ImageWindow");
m_imgWindowGeometry = settings.value("geometry").toByteArray() ;
settings.endGroup();
settings.beginGroup("LoupeWindow");
m_loupeWindowGeometry = settings.value("geometry").toByteArray() ;
settings.endGroup();
settings.beginGroup("CurveEditorWindow") ;
m_curveWindowGeometry = settings.value("geometry").toByteArray() ;
m_curveSplitterWidth = settings.value("splitter_width", -1).toInt() ;
m_curveSplitterWidthIndex = settings.value("splitter_width_idx", -1).toInt() ;
settings.endGroup() ;
settings.beginGroup("Shortcut");
m_scPosSelect = QKeySequence(settings.value("pos", "Z").toString()) ;
m_scRotSelect = QKeySequence(settings.value("rot", "X").toString()) ;
m_scCenterSelect = QKeySequence(settings.value("center", "C").toString()) ;
m_scScaleSelect = QKeySequence(settings.value("scale", "V").toString()) ;
m_scPathSelect = QKeySequence(settings.value("path", "B").toString()) ;
m_scCopyFrame = QKeySequence(settings.value("copy_frame", "Ctrl+C").toString()) ;
m_scPasteFrame = QKeySequence(settings.value("paste_frame", "Ctrl+V").toString()) ;
m_scPlayAnime = QKeySequence(settings.value("play_anime", "").toString()) ;
m_scStopAnime = QKeySequence(settings.value("stop_anime", "").toString()) ;
m_scJumpStartFrame = QKeySequence(settings.value("jump_start", "").toString()) ;
m_scJumpEndFrame = QKeySequence(settings.value("jump_end", "").toString()) ;
m_scAddFrameData = QKeySequence(settings.value("add_frame", "").toString()) ;
m_scDelFrameData = QKeySequence(settings.value("del_frame", "").toString()) ;
m_scDelItem = QKeySequence(settings.value("del_item", "").toString()) ;
m_scDispItem = QKeySequence(settings.value("disp_item", "").toString()) ;
m_scLockItem = QKeySequence(settings.value("lock_item", "").toString()) ;
m_scMoveAnimeWindow = QKeySequence(settings.value("move_anm_win", "").toString()) ;
m_scLockLoupe = QKeySequence(settings.value("lock_loupe", "").toString()) ;
m_scCopyAllFrame = QKeySequence(settings.value("copy_allframe", "").toString()) ;
m_scPasteAllFrame = QKeySequence(settings.value("paste_allframe", "").toString()) ;
m_scDeleteAllFrame = QKeySequence(settings.value("delete_allframe", "").toString()) ;
settings.endGroup();
}
示例12: QImage
QImage HistogramGenerator::calculateHistogram(const QSize ¶deSize, const QImage &image, const int &components,
HistogramGenerator::Rec rec, const bool &unscaled, const uint &accelFactor) const
{
if (paradeSize.height() <= 0 || paradeSize.width() <= 0 || image.width() <= 0 || image.height() <= 0) {
return QImage();
}
bool drawY = (components & HistogramGenerator::ComponentY) != 0;
bool drawR = (components & HistogramGenerator::ComponentR) != 0;
bool drawG = (components & HistogramGenerator::ComponentG) != 0;
bool drawB = (components & HistogramGenerator::ComponentB) != 0;
bool drawSum = (components & HistogramGenerator::ComponentSum) != 0;
int r[256], g[256], b[256], y[256], s[766];
// Initialize the values to zero
std::fill(r, r+256, 0);
std::fill(g, g+256, 0);
std::fill(b, b+256, 0);
std::fill(y, y+256, 0);
std::fill(s, s+766, 0);
const uint iw = image.bytesPerLine();
const uint ih = image.height();
const uint ww = paradeSize.width();
const uint wh = paradeSize.height();
const uint byteCount = iw*ih;
const uint stepsize = 4*accelFactor;
const uchar *bits = image.bits();
QRgb *col;
// Read the stats from the input image
for (uint i = 0; i < byteCount; i += stepsize) {
col = (QRgb *)bits;
r[qRed(*col)]++;
g[qGreen(*col)]++;
b[qBlue(*col)]++;
if (drawY) {
// Use if branch to avoid expensive multiplication if Y disabled
if (rec == HistogramGenerator::Rec_601) {
y[(int)floor(.299*qRed(*col) + .587*qGreen(*col) + .114*qBlue(*col))]++;
} else {
y[(int)floor(.2125*qRed(*col) + .7154*qGreen(*col) + .0721*qBlue(*col))]++;
}
}
if (drawSum) {
// Use an if branch here because the sum takes more operations than rgb
s[qRed(*col)]++;
s[qGreen(*col)]++;
s[qBlue(*col)]++;
}
bits += stepsize;
}
const int nParts = (drawY ? 1 : 0) + (drawR ? 1 : 0) + (drawG ? 1 : 0) + (drawB ? 1 : 0) + (drawSum ? 1 : 0);
if (nParts == 0) {
// Nothing to draw
return QImage();
}
const int d = 20; // Distance for text
const int partH = (wh-nParts*d)/nParts;
const float scaling = (float)partH/(byteCount >> 7);
const int dist = 40;
int wy = 0; // Drawing position
QImage histogram(paradeSize, QImage::Format_ARGB32);
QPainter davinci(&histogram);
davinci.setPen(QColor(220, 220, 220, 255));
histogram.fill(qRgba(0, 0, 0, 0));
if (drawY) {
drawComponentFull(&davinci, y, scaling, QRect(0, wy, ww, partH + dist), QColor(220, 220, 210, 255), dist, unscaled, 256);
wy += partH + d;
}
if (drawSum) {
drawComponentFull(&davinci, s, scaling/3, QRect(0, wy, ww, partH + dist), QColor(220, 220, 210, 255), dist, unscaled, 256);
wy += partH + d;
}
if (drawR) {
drawComponentFull(&davinci, r, scaling, QRect(0, wy, ww, partH + dist), QColor(255, 128, 0, 255), dist, unscaled, 256);
wy += partH + d;
}
if (drawG) {
drawComponentFull(&davinci, g, scaling, QRect(0, wy, ww, partH + dist), QColor(128, 255, 0, 255), dist, unscaled, 256);
wy += partH + d;
}
if (drawB) {
//.........这里部分代码省略.........
示例13: write_jpeg_image
static bool write_jpeg_image(const QImage &image, QIODevice *device, int sourceQuality)
{
bool success = false;
const QVector<QRgb> cmap = image.colorTable();
struct jpeg_compress_struct cinfo;
JSAMPROW row_pointer[1];
row_pointer[0] = 0;
struct my_jpeg_destination_mgr *iod_dest = new my_jpeg_destination_mgr(device);
struct my_error_mgr jerr;
cinfo.err = jpeg_std_error(&jerr);
jerr.error_exit = my_error_exit;
if (!setjmp(jerr.setjmp_buffer)) {
// WARNING:
// this if loop is inside a setjmp/longjmp branch
// do not create C++ temporaries here because the destructor may never be called
// if you allocate memory, make sure that you can free it (row_pointer[0])
jpeg_create_compress(&cinfo);
cinfo.dest = iod_dest;
cinfo.image_width = image.width();
cinfo.image_height = image.height();
bool gray=false;
switch (image.format()) {
case QImage::Format_Mono:
case QImage::Format_MonoLSB:
case QImage::Format_Indexed8:
gray = true;
for (int i = image.colorCount(); gray && i--;) {
gray = gray & (qRed(cmap[i]) == qGreen(cmap[i]) &&
qRed(cmap[i]) == qBlue(cmap[i]));
}
cinfo.input_components = gray ? 1 : 3;
cinfo.in_color_space = gray ? JCS_GRAYSCALE : JCS_RGB;
break;
default:
cinfo.input_components = 3;
cinfo.in_color_space = JCS_RGB;
}
jpeg_set_defaults(&cinfo);
qreal diffInch = qAbs(image.dotsPerMeterX()*2.54/100. - qRound(image.dotsPerMeterX()*2.54/100.))
+ qAbs(image.dotsPerMeterY()*2.54/100. - qRound(image.dotsPerMeterY()*2.54/100.));
qreal diffCm = (qAbs(image.dotsPerMeterX()/100. - qRound(image.dotsPerMeterX()/100.))
+ qAbs(image.dotsPerMeterY()/100. - qRound(image.dotsPerMeterY()/100.)))*2.54;
if (diffInch < diffCm) {
cinfo.density_unit = 1; // dots/inch
cinfo.X_density = qRound(image.dotsPerMeterX()*2.54/100.);
cinfo.Y_density = qRound(image.dotsPerMeterY()*2.54/100.);
} else {
cinfo.density_unit = 2; // dots/cm
cinfo.X_density = (image.dotsPerMeterX()+50) / 100;
cinfo.Y_density = (image.dotsPerMeterY()+50) / 100;
}
int quality = sourceQuality >= 0 ? qMin(sourceQuality,100) : 75;
#if defined(Q_OS_UNIXWARE)
jpeg_set_quality(&cinfo, quality, B_TRUE /* limit to baseline-JPEG values */);
jpeg_start_compress(&cinfo, B_TRUE);
#else
jpeg_set_quality(&cinfo, quality, true /* limit to baseline-JPEG values */);
jpeg_start_compress(&cinfo, true);
#endif
row_pointer[0] = new uchar[cinfo.image_width*cinfo.input_components];
int w = cinfo.image_width;
while (cinfo.next_scanline < cinfo.image_height) {
uchar *row = row_pointer[0];
switch (image.format()) {
case QImage::Format_Mono:
case QImage::Format_MonoLSB:
if (gray) {
const uchar* data = image.constScanLine(cinfo.next_scanline);
if (image.format() == QImage::Format_MonoLSB) {
for (int i=0; i<w; i++) {
bool bit = !!(*(data + (i >> 3)) & (1 << (i & 7)));
row[i] = qRed(cmap[bit]);
}
} else {
for (int i=0; i<w; i++) {
bool bit = !!(*(data + (i >> 3)) & (1 << (7 -(i & 7))));
row[i] = qRed(cmap[bit]);
}
}
} else {
const uchar* data = image.constScanLine(cinfo.next_scanline);
if (image.format() == QImage::Format_MonoLSB) {
for (int i=0; i<w; i++) {
bool bit = !!(*(data + (i >> 3)) & (1 << (i & 7)));
*row++ = qRed(cmap[bit]);
*row++ = qGreen(cmap[bit]);
*row++ = qBlue(cmap[bit]);
}
//.........这里部分代码省略.........
示例14: defaultSpeed
void RGBMatrix::updateMapChannels(const RGBMap& map, const FixtureGroup* grp)
{
uint fadeTime = (overrideFadeInSpeed() == defaultSpeed()) ? fadeInSpeed() : overrideFadeInSpeed();
// Create/modify fade channels for ALL pixels in the color map.
for (int y = 0; y < map.size(); y++)
{
for (int x = 0; x < map[y].size(); x++)
{
QLCPoint pt(x, y);
GroupHead grpHead(grp->head(pt));
Fixture* fxi = doc()->fixture(grpHead.fxi);
if (fxi == NULL)
continue;
QLCFixtureHead head = fxi->head(grpHead.head);
QVector <quint32> rgb = head.rgbChannels();
QVector <quint32> cmy = head.cmyChannels();
quint32 masterDim = fxi->masterIntensityChannel();
quint32 headDim = head.channelNumber(QLCChannel::Intensity, QLCChannel::MSB);
// Collect all dimmers that affect current head:
// They are the master dimmer (affects whole fixture)
// and per-head dimmer.
//
// If there are no RGB or CMY channels, the least important* dimmer channel
// is used to create grayscale image.
//
// The rest of the dimmer channels are set to full if dimmer control is
// enabled and target color is > 0 (see
// http://www.qlcplus.org/forum/viewtopic.php?f=29&t=11090)
//
// Note: If there is only one head, and only one dimmer channel,
// make it a master dimmer in fixture definition.
//
// *least important - per head dimmer if present,
// otherwise per fixture dimmer if present
QVector <quint32> dim;
if (masterDim != QLCChannel::invalid())
dim << masterDim;
if (headDim != QLCChannel::invalid())
dim << headDim;
uint col = map[y][x];
if (rgb.size() == 3)
{
// RGB color mixing
{
FadeChannel fc(doc(), grpHead.fxi, rgb.at(0));
fc.setTarget(qRed(col));
insertStartValues(fc, fadeTime);
m_fader->add(fc);
}
{
FadeChannel fc(doc(), grpHead.fxi, rgb.at(1));
fc.setTarget(qGreen(col));
insertStartValues(fc, fadeTime);
m_fader->add(fc);
}
{
FadeChannel fc(doc(), grpHead.fxi, rgb.at(2));
fc.setTarget(qBlue(col));
insertStartValues(fc, fadeTime);
m_fader->add(fc);
}
}
else if (cmy.size() == 3)
{
// CMY color mixing
QColor cmyCol(col);
{
FadeChannel fc(doc(), grpHead.fxi, cmy.at(0));
fc.setTarget(cmyCol.cyan());
insertStartValues(fc, fadeTime);
m_fader->add(fc);
}
{
FadeChannel fc(doc(), grpHead.fxi, cmy.at(1));
fc.setTarget(cmyCol.magenta());
insertStartValues(fc, fadeTime);
m_fader->add(fc);
}
{
FadeChannel fc(doc(), grpHead.fxi, cmy.at(2));
fc.setTarget(cmyCol.yellow());
insertStartValues(fc, fadeTime);
m_fader->add(fc);
}
}
else if (!dim.empty())
{
//.........这里部分代码省略.........
示例15: qRgba
// Flood fill
// ----- http://lodev.org/cgtutor/floodfill.html
void BitmapImage::floodFill(BitmapImage* targetImage,
QRect cameraRect,
QPoint point,
QRgb newColor,
int tolerance)
{
// If the point we are supposed to fill is outside the image and camera bounds, do nothing
if(!cameraRect.united(targetImage->bounds()).contains(point))
{
return;
}
// Square tolerance for use with compareColor
tolerance = static_cast<int>(qPow(tolerance, 2));
QRgb oldColor = targetImage->pixel(point);
oldColor = qRgba(qRed(oldColor), qGreen(oldColor), qBlue(oldColor), qAlpha(oldColor));
// Preparations
QList<QPoint> queue; // queue all the pixels of the filled area (as they are found)
BitmapImage* replaceImage = nullptr;
QPoint tempPoint;
QRgb newPlacedColor = 0;
QScopedPointer< QHash<QRgb, bool> > cache(new QHash<QRgb, bool>());
int xTemp = 0;
bool spanLeft = false;
bool spanRight = false;
// Extend to size of Camera
targetImage->extend(cameraRect);
replaceImage = new BitmapImage(cameraRect, Qt::transparent);
queue.append(point);
// Preparations END
while (!queue.empty())
{
tempPoint = queue.takeFirst();
point.setX(tempPoint.x());
point.setY(tempPoint.y());
xTemp = point.x();
newPlacedColor = replaceImage->constScanLine(xTemp, point.y());
while (xTemp >= targetImage->mBounds.left() &&
compareColor(targetImage->constScanLine(xTemp, point.y()), oldColor, tolerance, cache.data())) xTemp--;
xTemp++;
spanLeft = spanRight = false;
while (xTemp <= targetImage->mBounds.right() &&
compareColor(targetImage->constScanLine(xTemp, point.y()), oldColor, tolerance, cache.data()) &&
newPlacedColor != newColor)
{
// Set pixel color
replaceImage->scanLine(xTemp, point.y(), newColor);
if (!spanLeft && (point.y() > targetImage->mBounds.top()) &&
compareColor(targetImage->constScanLine(xTemp, point.y() - 1), oldColor, tolerance, cache.data())) {
queue.append(QPoint(xTemp, point.y() - 1));
spanLeft = true;
}
else if (spanLeft && (point.y() > targetImage->mBounds.top()) &&
!compareColor(targetImage->constScanLine(xTemp, point.y() - 1), oldColor, tolerance, cache.data())) {
spanLeft = false;
}
if (!spanRight && point.y() < targetImage->mBounds.bottom() &&
compareColor(targetImage->constScanLine(xTemp, point.y() + 1), oldColor, tolerance, cache.data())) {
queue.append(QPoint(xTemp, point.y() + 1));
spanRight = true;
}
else if (spanRight && point.y() < targetImage->mBounds.bottom() &&
!compareColor(targetImage->constScanLine(xTemp, point.y() + 1), oldColor, tolerance, cache.data())) {
spanRight = false;
}
Q_ASSERT(queue.count() < (targetImage->mBounds.width() * targetImage->mBounds.height()));
xTemp++;
}
}
targetImage->paste(replaceImage);
targetImage->modification();
delete replaceImage;
}