本文整理汇总了C++中CBaseTexture::GetPixels方法的典型用法代码示例。如果您正苦于以下问题:C++ CBaseTexture::GetPixels方法的具体用法?C++ CBaseTexture::GetPixels怎么用?C++ CBaseTexture::GetPixels使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CBaseTexture
的用法示例。
在下文中一共展示了CBaseTexture::GetPixels方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: CreateTiledThumb
bool CPicture::CreateTiledThumb(const std::vector<std::string> &files, const std::string &thumb)
{
if (!files.size())
return false;
unsigned int num_across = (unsigned int)ceil(sqrt((float)files.size()));
unsigned int num_down = (files.size() + num_across - 1) / num_across;
unsigned int tile_width = g_advancedSettings.m_imageRes / num_across;
unsigned int tile_height = g_advancedSettings.m_imageRes / num_down;
unsigned int tile_gap = 1;
bool success = false;
// create a buffer for the resulting thumb
uint32_t *buffer = (uint32_t *)calloc(g_advancedSettings.m_imageRes * g_advancedSettings.m_imageRes, 4);
for (unsigned int i = 0; i < files.size(); ++i)
{
int x = i % num_across;
int y = i / num_across;
// load in the image
unsigned int width = tile_width - 2*tile_gap, height = tile_height - 2*tile_gap;
CBaseTexture *texture = CTexture::LoadFromFile(files[i], width, height, true);
if (texture && texture->GetWidth() && texture->GetHeight())
{
GetScale(texture->GetWidth(), texture->GetHeight(), width, height);
// scale appropriately
uint32_t *scaled = new uint32_t[width * height];
if (ScaleImage(texture->GetPixels(), texture->GetWidth(), texture->GetHeight(), texture->GetPitch(),
(uint8_t *)scaled, width, height, width * 4))
{
if (!texture->GetOrientation() || OrientateImage(scaled, width, height, texture->GetOrientation()))
{
success = true; // Flag that we at least had one successful image processed
// drop into the texture
unsigned int posX = x*tile_width + (tile_width - width)/2;
unsigned int posY = y*tile_height + (tile_height - height)/2;
uint32_t *dest = buffer + posX + posY*g_advancedSettings.m_imageRes;
uint32_t *src = scaled;
for (unsigned int y = 0; y < height; ++y)
{
memcpy(dest, src, width*4);
dest += g_advancedSettings.m_imageRes;
src += width;
}
}
}
delete[] scaled;
}
delete texture;
}
// now save to a file
if (success)
success = CreateThumbnailFromSurface((uint8_t *)buffer, g_advancedSettings.m_imageRes, g_advancedSettings.m_imageRes,
g_advancedSettings.m_imageRes * 4, thumb);
free(buffer);
return success;
}
示例2: ReallocTexture
CBaseTexture* CGUIFontTTFGL::ReallocTexture(unsigned int& newHeight)
{
newHeight = CBaseTexture::PadPow2(newHeight);
CBaseTexture* newTexture = new CTexture(m_textureWidth, newHeight, XB_FMT_A8);
if (!newTexture || newTexture->GetPixels() == NULL)
{
CLog::Log(LOGERROR, "GUIFontTTFGL::CacheCharacter: Error creating new cache texture for size %f", m_height);
delete newTexture;
return NULL;
}
m_textureHeight = newTexture->GetHeight();
m_textureScaleY = 1.0f / m_textureHeight;
m_textureWidth = newTexture->GetWidth();
m_textureScaleX = 1.0f / m_textureWidth;
if (m_textureHeight < newHeight)
CLog::Log(LOGWARNING, "%s: allocated new texture with height of %d, requested %d", __FUNCTION__, m_textureHeight, newHeight);
m_staticCache.Flush();
m_dynamicCache.Flush();
memset(newTexture->GetPixels(), 0, m_textureHeight * newTexture->GetPitch());
if (m_texture)
{
m_updateY1 = 0;
m_updateY2 = m_texture->GetHeight();
unsigned char* src = (unsigned char*) m_texture->GetPixels();
unsigned char* dst = (unsigned char*) newTexture->GetPixels();
for (unsigned int y = 0; y < m_texture->GetHeight(); y++)
{
memcpy(dst, src, m_texture->GetPitch());
src += m_texture->GetPitch();
dst += newTexture->GetPitch();
}
delete m_texture;
}
m_textureStatus = TEXTURE_REALLOCATED;
return newTexture;
}
示例3: defined
bool CWinSystemX11::CreateNewWindow(const CStdString& name, bool fullScreen, RESOLUTION_INFO& res, PHANDLE_EVENT_FUNC userFunction)
{
RESOLUTION_INFO& desktop = g_settings.m_ResInfo[RES_DESKTOP];
if (fullScreen &&
(res.iWidth != desktop.iWidth || res.iHeight != desktop.iHeight ||
res.fRefreshRate != desktop.fRefreshRate || res.iScreen != desktop.iScreen))
{
//on the first call to SDL_SetVideoMode, SDL stores the current displaymode
//SDL restores the displaymode on SDL_QUIT(), if we change the displaymode
//before the first call to SDL_SetVideoMode, SDL changes the displaymode back
//to the wrong mode on exit
CLog::Log(LOGINFO, "CWinSystemX11::CreateNewWindow initializing to desktop resolution first");
if (!SetFullScreen(true, desktop, false))
return false;
}
if(!SetFullScreen(fullScreen, res, false))
return false;
CBaseTexture* iconTexture = CTexture::LoadFromFile("special://xbmc/media/icon.png");
if (iconTexture)
SDL_WM_SetIcon(SDL_CreateRGBSurfaceFrom(iconTexture->GetPixels(), iconTexture->GetWidth(), iconTexture->GetHeight(), 32, iconTexture->GetPitch(), 0xff0000, 0x00ff00, 0x0000ff, 0xff000000L), NULL);
SDL_WM_SetCaption("XBMC Media Center", NULL);
delete iconTexture;
// register XRandR Events
#if defined(HAS_XRANDR)
int iReturn;
XRRQueryExtension(m_dpy, &m_RREventBase, &iReturn);
XRRSelectInput(m_dpy, m_wmWindow, RRScreenChangeNotifyMask);
#endif
m_bWindowCreated = true;
return true;
}
示例4: DoWork
bool CTextureDDSJob::DoWork()
{
if (URIUtils::GetExtension(m_original).Equals(".dds"))
return false;
CBaseTexture *texture = CBaseTexture::LoadFromFile(m_original);
if (texture)
{ // convert to DDS
CDDSImage dds;
CLog::Log(LOGDEBUG, "Creating DDS version of: %s", m_original.c_str());
bool ret = dds.Create(URIUtils::ReplaceExtension(m_original, ".dds"), texture->GetWidth(), texture->GetHeight(), texture->GetPitch(), texture->GetPixels(), 40);
delete texture;
return ret;
}
return false;
}