本文整理汇总了C++中wxImage::GetData方法的典型用法代码示例。如果您正苦于以下问题:C++ wxImage::GetData方法的具体用法?C++ wxImage::GetData怎么用?C++ wxImage::GetData使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类wxImage
的用法示例。
在下文中一共展示了wxImage::GetData方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: SetPixels
void Surface::SetPixels( const wxImage& image )
{
m_Format = Format( image );
size_t numPixels = (size_t)m_Format.m_Pitch*m_Format.m_CanvasHeight;
if ( m_Format.GetDepth() == 24 ) {
m_Pixels = (void*)new char[ numPixels ];
memcpy( m_Pixels, image.GetData(), numPixels );
} else if ( m_Format.GetDepth() == 32 ) {
// wx uses a screwed up image format with a separate alpha plane. We need to convert into RGBA
m_Pixels = (void*)new char[ numPixels ];
unsigned int sPitch = image.GetWidth()*3;
unsigned char* pData = image.GetData();
unsigned char* pAlpha= image.GetAlpha();
unsigned int aMask = m_Format.m_AMask;
unsigned int aShift= m_Format.m_AShift;
int w = (int)m_Format.GetWidth();
int h = (int)m_Format.GetHeight();
for ( int y = 0; y < h; y++ ) {
unsigned int *pSrc = (unsigned int*)(pData + y*sPitch);
unsigned int *pDst = (unsigned int*)((unsigned char*)m_Pixels + y*m_Format.GetPitch());
for ( int x = 0; x < w; x++ ) {
*pDst++ = ((*pSrc) & ~aMask) | ((*pAlpha) << aShift);
pAlpha++; pSrc = (unsigned int *)(((unsigned char*)pSrc) + 3); // performance issues with odd addresses???
}
}
} else if ( m_Format.GetDepth() == 8 ) {
// 8 bit gray scale - downscale to gray using luma
} else if ( m_Format.GetDepth() == 1 ) {
// 1 bit bitmap
} else {
// cannot compute
m_Pixels = NULL;
}
}
示例2: BlendImage
/**
@brief Blends two images based on alpha channel present in foreground image.
@param foreground Foreground image, must have an alpha channel
@param background Background image, may have an alpha channel
@param blend_alpha Whether the returned image will have an alpha channel.
@return A copy of the background image with the foreground image blended on
top of it. The returned image will have an alpha channel iff the background
image has an alpha channel. In that case the alpha channel is blended
identical to the red/green/blue channels.
*/
wxImage BlendImage( const wxImage& foreground, const wxImage& background, bool blend_alpha )
{
if ( ( foreground.GetWidth() != background.GetWidth() ) || ( background.GetHeight() != foreground.GetHeight() ) )
{
wxLogDebugFunc(_T("size mismatch while blending"));
return background;
}
bool zhu = blend_alpha && background.HasAlpha();
if ( foreground.HasAlpha() )
{
wxImage ret( background.GetWidth(), foreground.GetHeight() );
const unsigned char* background_data = background.GetData();
const unsigned char* foreground_data = foreground.GetData();
const unsigned char* background_alpha = NULL;
const unsigned char* foreground_alpha = foreground.GetAlpha();
unsigned char* result_data = ret.GetData();
unsigned char* result_alpha = NULL;
unsigned int pixel_count = background.GetWidth() * background.GetHeight();
if ( zhu )
{
background_alpha = background.GetAlpha();
ret.InitAlpha();
result_alpha = ret.GetAlpha();
}
for ( unsigned int i = 0, i_a = 0; i < pixel_count * 3; i+=3, i_a++ )
{
unsigned char fore_alpha = foreground_alpha[i_a] ;
float back_blend_fac = ( 255 - fore_alpha)/255.0;
float fore_blend_fac = fore_alpha/255.0 ;
result_data[i] = foreground_data[i] * fore_blend_fac + background_data[i] * back_blend_fac ;
result_data[i+1] = foreground_data[i+1] * fore_blend_fac + background_data[i+1] * back_blend_fac ;
result_data[i+2] = foreground_data[i+2] * fore_blend_fac + background_data[i+2] * back_blend_fac ;
if ( zhu )
{
unsigned char back_alpha = background_alpha[i_a] ;
result_alpha[i_a] = fore_alpha * fore_blend_fac + back_alpha * back_blend_fac ;
}
}
return ret;
}
wxLogDebugFunc(_T("cannot blend without alpha"));
return background;
}
示例3: ImageDrawSelectionField
void ImageDrawSelectionField(wxImage& img, int x, int y, int width, int height, unsigned char red, unsigned char green, unsigned char blue) {
unsigned char* rawdata = img.GetData();
unsigned char* rawalpha = img.GetAlpha();
int thick = min(width,height)/100+1;
int i,j,posx,posy;
#define MACRO_SETPIXELCOLOR() \
rawdata[3*(posx+posy)] = red; \
rawdata[3*(posx+posy)+1] = green; \
rawdata[3*(posx+posy)+2] = blue; \
rawalpha[posx+posy] = 0xFF;
width--;
height--;
for (i=0;i<=width;i++) {
posx = (x+i)%img.GetWidth();
for (j=0;j<thick;j++) {
posy = ((y+j)%img.GetHeight())*img.GetWidth();
MACRO_SETPIXELCOLOR()
posy = ((y+height-j)%img.GetHeight())*img.GetWidth();
MACRO_SETPIXELCOLOR()
}
}
for (i=0;i<=height;i++) {
posy = (y+i)%img.GetHeight()*img.GetWidth();
for (j=0;j<thick;j++) {
posx = (x+j)%img.GetWidth();
MACRO_SETPIXELCOLOR()
posx = (x+width-j)%img.GetWidth();
MACRO_SETPIXELCOLOR()
}
}
}
示例4: tintImage
wxImage tintImage( wxImage to_colorize, wxColour col)
{
wxImage highlightIcon(to_colorize.GetWidth(),to_colorize.GetHeight());
bool do_alpha = false;
if(to_colorize.HasAlpha())
{
highlightIcon.InitAlpha();
do_alpha = true;
}
else if(to_colorize.HasMask())
{
highlightIcon.SetMaskFromImage(to_colorize,to_colorize.GetMaskRed(),to_colorize.GetMaskGreen(),to_colorize.GetMaskBlue());
}
for(int x = 0; x < highlightIcon.GetWidth(); x++)
{
for(int y = 0; y < highlightIcon.GetHeight(); y++)
{
to_colorize.GetData();
unsigned char srcR = to_colorize.GetRed(x,y);
unsigned char srcG = to_colorize.GetGreen(x,y);
unsigned char srcB = to_colorize.GetBlue(x,y);
highlightIcon.SetRGB(x,y,(srcR + col.Red())/2,(srcG + col.Green())/2, (srcB + col.Blue())/2);
if(do_alpha)
highlightIcon.SetAlpha(x,y,to_colorize.GetAlpha(x,y));
}
}
return highlightIcon;
}
示例5: GreyOutImage
void GreyOutImage(wxImage &img)
{
unsigned char *data = img.GetData();
unsigned char r,g,b;
unsigned char mr,mg,mb;
int i, tst;
int len = img.GetHeight()*img.GetWidth()*3;
if (img.HasMask())
{
mr = img.GetMaskRed();
mg = img.GetMaskGreen();
mb = img.GetMaskBlue();
}
tst=0;
for (i=0;i<len;i+=3)
{
r=data[i]; g=data[i+1]; b=data[i+2];
if (!img.HasMask() ||
r!=mr || g!=mg || b!=mb)
{
if (!tst)
{
tst=1;
}
r = (unsigned char)((230.0-r)*0.7+r);
g = (unsigned char)((230.0-g)*0.7+g);
b = (unsigned char)((230.0-b)*0.7+b);
data[i]=r; data[i+1]=g; data[i+2]=b;
}
}
}
示例6: GetSubImageWithAlpha
/// Gets a rectangle from within another image, INCLUDING the alpha channel
/// \bug in wxWidgets, wxImage::GetSubImage should do this itself.
wxImage GetSubImageWithAlpha( const wxImage & Src, const wxRect &rect )
{
//First part of this code is lifted from wxImage::GetSubImage() source code.
wxImage image;
wxCHECK_MSG( Src.Ok(), image, wxT("invalid image") );
wxCHECK_MSG( (rect.GetLeft()>=0) && (rect.GetTop()>=0) && (
rect.GetRight()<=Src.GetWidth()) && (rect.GetBottom()<=Src.GetHeight()),
image, wxT("invalid subimage size") );
int subwidth=rect.GetWidth();
const int subheight=rect.GetHeight();
image.Create( subwidth, subheight, false );
unsigned char *subdata = image.GetData(), *data=Src.GetData();
wxCHECK_MSG( subdata, image, wxT("unable to create image") );
// JKC: Quick hack - don't deal with masks - need to understand macro M_IMGDATA first.
// if (Src.M_IMGDATA->m_hasMask)
// image.SetMaskColour( Src.M_IMGDATA->m_maskRed, Src.M_IMGDATA->m_maskGreen, Src.M_IMGDATA->m_maskBlue );
int subleft=3*rect.GetLeft();
int width=3*Src.GetWidth();
subwidth*=3;
data+=rect.GetTop()*width+subleft;
for (long j = 0; j < subheight; ++j)
{
memcpy( subdata, data, subwidth);
subdata+=subwidth;
data+=width;
}
// OK, so we've copied the RGB data.
// Now do the Alpha channel.
wxASSERT( Src.HasAlpha() );
image.InitAlpha();
subleft/=3;
width/=3;
subwidth/=3;
data =Src.GetAlpha();
subdata =image.GetAlpha();
data+=rect.GetTop()*width+subleft;
for (long j = 0; j < subheight; ++j)
{
memcpy( subdata, data, subwidth);
subdata+=subwidth;
data+=width;
}
return image;
}
示例7: OnGLRender
void OnGLRender(wxPaintEvent& WXUNUSED(event))
{
m_glContext->SetCurrent(*m_glCanvas);
glEnable(GL_TEXTURE_2D);
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
glClear(GL_COLOR_BUFFER_BIT);
wxPrintf("Benchmarking %s: ", "OpenGL images");
fflush(stdout);
wxStopWatch sw;
for ( int n = 0; n < opts.numIters; n++ )
{
UpdateRGB(g_image.GetData(), n);
glTexSubImage2D(GL_TEXTURE_2D, 0,
0, 0, opts.width, opts.height,
GL_RGB, GL_UNSIGNED_BYTE, g_image.GetData());
glBegin(GL_QUADS);
glTexCoord2f(0, 0);
glVertex2f(-1.0, -1.0);
glTexCoord2f(0, 1);
glVertex2f(-1.0, 1.0);
glTexCoord2f(1, 1);
glVertex2f(1.0, 1.0);
glTexCoord2f(1, 0);
glVertex2f(1.0, -1.0);
glEnd();
m_glCanvas->SwapBuffers();
}
const long t = sw.Time();
wxPrintf("%ld images done in %ldms = %gus/image or %ld FPS\n",
opts.numIters, t, (1000. * t)/opts.numIters,
(1000*opts.numIters + t - 1)/t);
wxTheApp->ExitMainLoop();
}
示例8: SplitH
// static
ImageArray ImageRoll::SplitH(const wxImage &src, wxColour magicColor)
{
ImageArray result;
int width = src.GetWidth();
int height = src.GetHeight();
unsigned char *data = src.GetData();
unsigned char *ptr = data;
unsigned char magicRed = magicColor.Red();
unsigned char magicGreen = magicColor.Green();
unsigned char magicBlue = magicColor.Blue();
bool cur, prev;
int i, j, start;
// Sanity check...
if (width<=0 || height<=0 || data==NULL)
return result;
prev = false;
start = 0;
for(i=0; i<width+1; i++) {
if (i < width) {
unsigned char *ptr2 = ptr;
cur = true;
for(j=0; j<height && cur; j++) {
if (!(ptr2[0] == magicRed &&
ptr2[1] == magicGreen &&
ptr2[2] == magicBlue))
cur = false;
ptr2 += 3 * width;
}
}
else
cur = !prev;
if ((cur && !prev)) {
wxRect subRect(start, 0, i-start, height);
wxImage subImage;
if (subRect.width > 0)
subImage = src.GetSubImage(subRect);
else
subImage = wxImage(subRect.width, subRect.height);
result.Add(subImage);
}
else if (!cur && prev) {
start = i;
}
prev = cur;
ptr += 3;
}
return result;
}
示例9: addMipMap
static void addMipMap(GLuint* texture, const wxImage &l_Image, int &level) {
if (l_Image.IsOk() == true)
{
glTexImage2D(GL_TEXTURE_2D, level, GL_RGB, (GLsizei)l_Image.GetWidth(), (GLsizei)l_Image.GetHeight(),
0, GL_RGB, GL_UNSIGNED_BYTE, (GLvoid*)l_Image.GetData());
int err = glGetError();
if (err == GL_NO_ERROR) {
level++;
}
}
}
示例10: wxStringFromWxImage
wxString SIPgSql::wxStringFromWxImage(wxImage image) { // à valider en aller retour !!!
map <string, string> paramsDic;
SIPgSql& instancePgSql = SIPgSql::Instance(paramsDic);
PGconn *pgConn = instancePgSql.getConn();
wxString string0;
char * usChar = (char*)image.GetData();
size_t to_length;
unsigned char *pgStr = PQescapeByteaConn(pgConn, (const unsigned char *)usChar, strlen(usChar), &to_length);
string0 = wxString(pgStr);
return string0;
}
示例11: InitializeTexture
void InitializeTexture(int w, int h)
{
glGenTextures(1, &g_texture);
glBindTexture(GL_TEXTURE_2D, g_texture);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
g_image.Create(w, h, false /* don't clear */);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glTexImage2D(GL_TEXTURE_2D, 0,
GL_RGB, g_image.GetWidth(), g_image.GetHeight(), 0,
GL_RGB, GL_UNSIGNED_BYTE, g_image.GetData());
}
示例12: recognize
wxString Ocr::recognize(const wxImage & image) const
{
char * text = _api->TesseractRect(image.GetData(),
3,
3 * image.GetWidth(),
0,
0,
image.GetWidth(),
image.GetHeight());
wxString outputText(text, wxConvUTF8);
delete[] text;
return outputText;
}
示例13: check_equal
bool check_equal(const wxImage &self, const wxImage &cother)
{
if(self.GetHeight() != cother.GetHeight()){
return false;
}
if(self.GetWidth() != cother.GetWidth()) {
return false;
}
if(strcmp((char*)self.GetData(), (char*)cother.GetData()) != 0){
return false;
}
if(self.HasAlpha()) {
if(!cother.HasAlpha())
return false;
if(strcmp((char*)self.GetAlpha(), (char*)cother.GetAlpha()) != 0){
return false;
}
} else {
return !cother.HasAlpha();
}
return true;
}
示例14: CopyFromImage
bool usImage::CopyFromImage(const wxImage& img)
{
Init(img.GetSize());
const unsigned char *pSrc = img.GetData();
unsigned short *pDest = ImageData;
for (int i = 0; i < NPixels; i++)
{
*pDest++ = ((unsigned short) *pSrc) << 8;
pSrc += 3;
}
return false;
}
示例15: Engine
wxImage
FreeImage_Rescale(wxImage src, wxInt32 dst_width, wxInt32 dst_height, FREE_IMAGE_FILTER filter) {
wxImage dst;
if ((src.Ok()) && (dst_width > 0) && (dst_height > 0)) {
dst.Create(dst_width, dst_height);
// select the filter
CGenericFilter *pFilter = NULL;
switch(filter) {
case FILTER_BOX:
pFilter = new CBoxFilter();
break;
case FILTER_BICUBIC:
pFilter = new CBicubicFilter();
break;
case FILTER_BILINEAR:
pFilter = new CBilinearFilter();
break;
case FILTER_BSPLINE:
pFilter = new CBSplineFilter();
break;
case FILTER_CATMULLROM:
pFilter = new CCatmullRomFilter();
break;
case FILTER_LANCZOS3:
pFilter = new CLanczos3Filter();
break;
}
CResizeEngine Engine(pFilter);
// perform upsampling or downsampling
unsigned char *pSrc = src.GetData();
unsigned char *pDst = dst.GetData();
wxInt32 src_width = src.GetWidth();
wxInt32 src_height = src.GetHeight();
Engine.Scale(pSrc, src_width, src_height, pDst, dst_width, dst_height);
delete pFilter;
}
return dst;
}