Creating a sub image
From CEGUI Wiki - Crazy Eddie's GUI System (Open Source)
(Redirected from CreateSubImage)
Written for CEGUI 0.5
Works with versions 0.5.x (obsolete)
Written for CEGUI 0.6
Works with versions 0.6.x (obsolete)
Written for CEGUI 0.7
Works with versions 0.7.x (obsolete)
I found that it might be useful to be able to create a subimage from an image. Say for instance u have a minimap created from a file, and you want to be able to zoom it. For this purpose it's best to use a subimage from the map. Basically this code can be used to complete that task:
//this function is just called to show the imageloading from a file, and selecting a subpart of the image void GUIHud::createMMap() { //load in a file, replace with your own file CEGUI::Texture* texture = mGUIRenderer->createTexture("Ground1.bmp"); //create a new imageset with an image that spans the entire texture CEGUI::Imageset* set = CEGUI::ImagesetManager::getSingleton().createImageset((CEGUI::utf8*)"ExampleImageSet",texture); set->defineImage("Base",CEGUI::Point(0.0f,0.0f),CEGUI::Size(texture->getWidth(),texture->getHeight()),CEGUI::Point(0.0f,0.0f)); //create a new window for this stuff and link the created image to it CEGUI::StaticImage* renderTarget = (CEGUI::StaticImage*)CEGUI::WindowManager::getSingleton().createWindow((CEGUI::utf8*)"SEM/StaticImage", (CEGUI::utf8*)"BaseWindow"); renderTarget->setSize(CEGUI::Size(0.3f, 0.4f)); CEGUI::WindowManager::getSingleton().getWindow((CEGUI::utf8*)topElement)->addChildWindow(renderTarget); renderTarget->setPosition(CEGUI::Point(0.6, 0.6)); renderTarget->setImage(&set->getImage((CEGUI::utf8*)"Base")); /*this function replaces the image with the new coordinates passed with it, which selects a subimage, and replaces the given image with the newly created one */ createSubImage("ExampleImageSet","Base",CEGUI::Point(0.0f,0.0f),CEGUI::Size(texture->getWidth()-512,texture->getHeight()-512),CEGUI::Point(0.0f,0.0f)); //should not be necessary, if anything weird appears try redrawing the image //renderTarget->requestRedraw(); } //this function replaces the image in the given imageset with the new coordinates that are passed with this function void GUIHud::createSubImage(CEGUI::String imageSetName,CEGUI::String imageName, CEGUI::Point start, CEGUI::Size size,CEGUI::Point offset) { CEGUI::Imageset* curr_imageset = CEGUI::ImagesetManager::getSingleton().getImageset(imageSetName); CEGUI::Texture* texture = curr_imageset->getTexture(); curr_imageset->undefineImage(imageName); curr_imageset->defineImage(imageName,start,size,offset); }
this code was written with Ogre, but the main lines of it should be clear i think.