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!

0 comentários: