wxImage wxBitmap::ConvertToImage() const { wxCHECK_MSG( IsOk(), wxNullImage, wxT("invalid bitmap") ); wxImage img(GetWidth(), GetHeight()); wxIDirectFBSurfacePtr src = M_BITMAP->m_surface; switch ( src->GetPixelFormat() ) { case DSPF_RGB24: case DSPF_RGB32: case DSPF_ARGB: CopySurfaceToImage(src, img); break; default: { // wxBitmap uses different pixel format, so we have to use a // temporary surface and blit to the bitmap via it: wxIDirectFBSurfacePtr dst(CreateSurfaceForImage(img)); if ( !dst->SetBlittingFlags(DSBLIT_NOFX) ) return wxNullImage; if ( !dst->Blit(src->GetRaw(), NULL, 0, 0) ) return wxNullImage; CopySurfaceToImage(dst, img); } } // FIXME: implement mask setting in the image wxASSERT_MSG( GetMask() == NULL, "bitmap masks are ignored for now" ); return img; }
wxBitmap::wxBitmap(const wxImage& imageOrig, int depth) { wxCHECK_RET( imageOrig.IsOk(), wxT("invalid image") ); wxImage image(imageOrig); // convert mask to alpha channel, because wxMask isn't implemented yet // FIXME: don't do this, implement proper wxMask support if ( image.HasMask() ) image.InitAlpha(); DFBSurfacePixelFormat format = DepthToFormat(depth); if ( format == DSPF_UNKNOWN && image.HasAlpha() ) format = DSPF_ARGB; // create surface in screen's format (unless we need alpha channel, // in which case use ARGB): if ( !CreateWithFormat(image.GetWidth(), image.GetHeight(), format) ) return; // then copy the image to it: wxIDirectFBSurfacePtr dst = M_BITMAP->m_surface; switch ( dst->GetPixelFormat() ) { case DSPF_RGB24: case DSPF_RGB32: case DSPF_ARGB: CopyImageToSurface(image, dst); break; default: { // wxBitmap uses different pixel format, so we have to use a // temporary surface and blit to the bitmap via it: wxIDirectFBSurfacePtr src(CreateSurfaceForImage(image)); CopyImageToSurface(image, src); if ( !dst->SetBlittingFlags(DSBLIT_NOFX) ) return; if ( !dst->Blit(src->GetRaw(), NULL, 0, 0) ) return; } } }
wxImage wxBitmap::ConvertToImage() const { wxCHECK_MSG( Ok(), wxNullImage, wxT("invalid bitmap") ); wxImage img(GetWidth(), GetHeight()); wxIDirectFBSurfacePtr dst(CreateSurfaceForImage(img)); wxIDirectFBSurfacePtr src = M_BITMAP->m_surface; if ( !dst->SetBlittingFlags(DSBLIT_NOFX) ) return wxNullImage; if ( !dst->Blit(src->GetRaw(), NULL, 0, 0) ) return wxNullImage; // FIXME: implement mask setting in the image wxASSERT_MSG( GetMask() == NULL, _T("bitmap masks are ignored for now") ); return img; }
wxBitmap::wxBitmap(const wxImage& image, int depth) { wxCHECK_RET( image.Ok(), wxT("invalid image") ); // create surface in screen's format: if ( !Create(image.GetWidth(), image.GetHeight(), depth) ) return; // then copy the image to it: wxIDirectFBSurfacePtr src(CreateSurfaceForImage(image)); wxIDirectFBSurfacePtr dst = M_BITMAP->m_surface; if ( !dst->SetBlittingFlags(DSBLIT_NOFX) ) return; if ( !dst->Blit(src->GetRaw(), NULL, 0, 0) ) return; // FIXME: implement mask creation from image's mask (or alpha channel?) wxASSERT_MSG( !image.HasMask(), _T("image masks are ignored for now") ); }