Los mapas de bits estándar se compilan en la aplicación y deben proporcionarse en el momento de la compilación. Los mapas de bits creados en la RAM en tiempo de ejecución se denominan mapas de bits dinámicos. Los mapas de bits dinámicos se utilizan de la misma manera que los mapas de bits estáticos compilados en la aplicación.
Configuración de mapa de bits dinámico
La caché de mapas de bits debe configurarse antes de poder crear mapas de bits dinámicos.
FrontendApplication.hpp
#include <gui/common/FrontendApplication.hpp>
#include <BitmapDatabase.hpp>
LOCATION_PRAGMA_NOLOAD("TouchGFX_Cache")
uint16_t Cache[1024 * 604] LOCATION_ATTRIBUTE_NOLOAD("TouchGFX_Cache");
FrontendApplication::FrontendApplication(Model& m, FrontendHeap& heap)
: FrontendApplicationBase(m, heap)
{
#ifdef SIMULATOR
const uint32_t cacheSize = 0x300000; //3 MB, as example
uint16_t* const cacheStartAddr = (uint16_t*)malloc(cacheSize);
Bitmap::setCache(cacheStartAddr, cacheSize, 4);
#else
Bitmap::setCache(Cache, sizeof(Cache));
#endif
}
Utilice mapas de bits dinámicos
Para utilizar un mapa de bits dinámico, necesitamos un control para mostrarlo. Para hacer esto, inserte un control de imagen en la vista:
#ifndef SCREENVIEW_HPP
#define SCREENVIEW_HPP
#include <gui_generated/screen_screen/screenViewBase.hpp>
#include <gui/screen_screen/screenPresenter.hpp>
#include <touchgfx/widgets/Image.hpp>
class screenView : public screenViewBase
{
public:
screenView();
virtual ~screenView() {}
virtual void setupScreen();
virtual void tearDownScreen();
protected:
private:
Image image;
};
#endif // SCREENVIEW_HPP
El proceso de uso de este control y mapa de bits dinámico se divide en tres pasos:
- Cree mapas de bits dinámicos en la caché de mapas de bits
- Limpiar el espacio de almacenamiento utilizado por los mapas de bits dinámicos
- Asignar mapa de bits para controlar
#include <gui/screen_screen/screenView.hpp>
#include <string.h>
screenView::screenView()
{
}
void screenView::setupScreen()
{
BitmapId bmpId;
//Create (16bit) dynamic bitmap of size 100x150
const int width = 100;
const int height = 150;
bmpId = Bitmap::dynamicBitmapCreate(100, 150, Bitmap::RGB565);
//set all pixels white
if (bmpId != BITMAP_INVALID)
{
memset(Bitmap::dynamicBitmapGetAddress(bmpId), 0xFF, width*height*2);
}
//Make Image widget show the dynamic bitmap
image.setBitmap(Bitmap(bmpId));
//Position image and add to View
image.setXY(20, 20);
add(image);
}
void screenView::tearDownScreen()
{
screenViewBase::tearDownScreen();
}
Para cargar una imagen desde un archivo, puede usar el código del cargador en lugar de llamar a memset. Leer información de la imagen del sistema de archivos.
Ejecutar emulador