Mapa de bits dinámico TouchGFX

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:

  1. Cree mapas de bits dinámicos en la caché de mapas de bits
  2. Limpiar el espacio de almacenamiento utilizado por los mapas de bits dinámicos
  3. 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

Supongo que te gusta

Origin blog.csdn.net/lushoumin/article/details/133418867
Recomendado
Clasificación