quarta-feira, 20 de junho de 2007

Trabalhando com Bitmaps

Esse foi um dos meus maiores problemas quando comecei a programar em Symbian. Como usar bitmaps em minhas aplicações?! A falta de material didático dificulta para qualquer pessoa mas nada que um pouco de leitura e pesquisa não resolva.

O SymbianOS não utiliza o formato nativo de Bitmaps por questões de recursos, é preciso convertê-los para multibitmaps (.mbm). Até onde sei existem duas formas de realizar a conversão, uma é através do arquivo de projeto (.mmp) e a outra é utilizando um aplicativo que vem com o Kit SDK do Symbian chamado de bmconv. Ao converter um bitmap são gerado dois arquivos, o .mbm e um .mbg, nesse .mbg fica a enumeração com os IDs das imagens, escrevi mais detalhadamente sobre como realizar essa conversão no wiki da nokia e você pode ler aqui!. Não entrarei em detalhes aqui pois todas essas informações estão na wiki!

Para utilizar bitmaps é preciso criar uma instância da classe CFbsBitmaps e carregar o bitmap. Mais informações sobre essa classe podem ser encontradas aqui!
PS: é preciso incluir o cabeçalho fbs.h, linkar a biblioteca fbscli.lib e incluir o arquivo .mbg referente aos bitmaps.

Após criar uma instância CFbsBitmap é preciso alocar memória para ela e então carregar a imagem, isto pode ser feito no ConstructL() do AppView da aplicação. ex.:

//alocando memória utilizando o operador new sobrecarregado
iBitmap = new (ELeave) CFbsBitmap;
iBitmap->Load(_L("\\Apps\\imagem.mbm"), EMbmImagemTeste);

Dentro da função Draw iremos usar a função BitBlt(const TPoint &aPos, const CFbsBitmap *aDevice) da classe CWindowGc para exibir a imagem para o usuário ex.:

//exibe o bitmap na origem
gc.BitBlt(TPoint(0,0), iBitmap);

Você pode também utilizar a função DrawBitmap que associa o bitmap a um retângulo. ex.:

TRect retangulo(Tsize(40,40), TPoint(0,0);
gc.DrawBitmap(retangulo, iBitmap);

Pronto, procurei ser o mais objetivo possível por que isso não é difícil, meu principal problema foi a ocorrência de erros por não ter linkado a bilioteca fbscli.lib (na versão 1.1 do Carbide era um pouco mais complicado), mas fora isso não tive problemas. Você pode encontrar um exemplo pronto na wiki da nokia. Link aqui!

Nenhum comentário: