gambas-source-code/main/lib/image.effect/qimage.cpp
Benoît Minisini ac548e8734 [CONFIGURATION]
* BUG: Compile files with maximum optimization correctly.

[DEVELOPMENT ENVIRONMENT]
* BUG: Remove The Form_Close event handler in the FHelp form. It did 
  stupid things indirectly.

[WIKI CGI SCRIPT]
* NEW: Enhancements to support 2.0 and 3.0 descriptions on the same page.

[GB.FORM]
* NEW: Enhance the ColorChooser control.

[GB.FORM.MDI]
* BUG: Fix the Toolbar layout algorithm.

[GB.IMAGE]
* BUG: Image.Colorize() works again.

[GB.IMAGE.EFFECT]
* NEW: This component includes image filtering and effect routines. This is 
  the old gb.image component from Gambas 2. Everything is not working 
  correctly at the moment.

[GB.QT4]
* NEW: Color.LightForeground returns the light foreground color used for
  drawing separators and plain panel borders.
* BUG: Prevent crashes coming from the fact that Qt deletes child widgets 
  before emiting the destroy signal on the parent.


git-svn-id: svn://localhost/gambas/trunk@2296 867c0c6c-44f3-4631-809d-bfa615b0a4ec
2009-09-01 01:14:13 +00:00

135 lines
2.3 KiB
C++

/***************************************************************************
qimage.cpp
(c) 2000-2009 Benoît Minisini <gambas@users.sourceforge.net>
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, or (at your option)
any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
***************************************************************************/
#include "qimage.h"
void QImage::init()
{
img = NULL;
bpl = 0;
inv = FALSE;
jt = NULL;
created = false;
}
void QImage::getInfo()
{
bpl = 4 * img->width;
inv = GB_IMAGE_FMT_IS_SWAPPED(img->format);
if (inv)
fprintf(stderr, "ARGB\n");
jumpTable();
}
void QImage::create(int w, int h, bool t)
{
img = IMAGE.Create(w, h, t ? GB_IMAGE_BGRA : GB_IMAGE_BGRX, NULL);
created = true;
getInfo();
}
QImage::QImage()
{
init();
}
QImage::QImage(const QSize &size, bool t)
{
init();
create(size.width(), size.height(), t);
}
QImage::QImage(int w, int h, bool t)
{
init();
create(w, h, t);
}
QImage::QImage(GB_IMAGE image)
{
init();
img = (GB_IMG *)image;
getInfo();
}
QImage::~QImage()
{
if (jt)
free(jt);
}
void QImage::release()
{
if (created)
{
GB.Unref((void **)&img);
created = false;
}
}
/*static inline uint invert(uint col)
{
return (col >> 24) | (col << 24) | ((col & 0x00FF0000) >> 8) | ((col & 0x0000FF00) << 8);
}*/
void QImage::invert()
{
uint i, n;
uchar *p, t;
n = width() * height();
p = (uchar *)bits();
for (i = 0; i < n; i++, p += 4)
{
t = p[0];
p[0] = p[2];
p[2] = t;
}
}
uchar **QImage::jumpTable()
{
if (!jt && img->data)
{
jt = (uchar**)malloc(height() * sizeof(uchar*));
for (int i = 0; i < height(); i++)
jt[i] = (uchar *)img->data + i * bpl;
}
return jt;
}
void QImage::invertPixels()
{
uint i, n;
uint *p;
n = width() * height();
p = (uint *)bits();
for (i = 0; i < n; i++)
p[i] ^= 0xFFFFFF;
}