javax.microedition.lcdui.Graphics pintura em LWUIT Component

votos
0

Qual seria o melhor método para a obtenção de um elemento personalizado (que está usando J2ME nativa Graphics) pintado em elementos LWUIT?

O elemento personalizado é uma implementação da biblioteca de mapeamento, que pinta o seu conteúdo (por exemplo Google mapa) para objeto Graphics. Como seria possível pintar o resultado diretamente em elementos LWUIT (no momento estou a tentar pintá-lo em um componente).

É a única maneira de escrever um wrapper no pacote LWUIT, que exporia a implementação interna do mesmo?

Editar:

John: sua solução parece um monte de engenharia: P O que eu acabei usando é seguinte invólucro:

package com.sun.lwuit;

public class ImageWrapper {
  private final Image image;

  public ImageWrapper(final Image lwuitBuffer) {
    this.image = lwuitBuffer;
  }

  public javax.microedition.lcdui.Graphics getGraphics() {
    return image.getGraphics().getGraphics();
  }
}

Agora eu posso obter o elemento Gráficos 'nativa' de LWUIT. Pintura nele - pintura efetivamente imagem LWUIT por diante. E eu posso usar a imagem para pintar em um componente.

E ainda se parece com um hack :)

Mas o problema real é 50KB de sobrecarga código, mesmo depois de ofuscação. Mas esta é uma questão para outro post :)

/ JaanusSiim

Publicado 22/08/2008 em 21:17
fonte usuário
Em outras línguas...                            


2 respostas

votos
2

Eu não acho que qualquer hacking é necessário. Você pode subclasse a classe LWTUI componente e, em seguida, você pode dor o que quiser sobre o contexto gráfico do componente. Você não pode pegar o objeto lcdui.Graphics nativa, mas um objeto com uma mesma interface que é fácil de usar.

Se você realmente precisa para passar um lcdui.Graphics para alguma biblioteca subjacente para exibir sua saída, então eu sugiro o seguinte:

Em algum lugar em seu código componente (fazer apenas quando o conteúdo do componente realmente precisa ser mudado):

private Image buffer = null; // keep this

int[] bufferArray = new int[desiredWidth * desiredHeight];
javax.microedition.lcdui.Image bufferImage = 
    Image.createEmptyImage(desiredWidth, desiredHeight);
thirPartyComponent.paint(bufferImage.getGraphics());
bufferImage.getRGB(bufferArray,0,1,0,0,desiredWidth, desiredHeight);
bufferImage = null; //no longer needed
buffer = Image.createImage(bufferArray, desiredWidth, desiredHeight);

No método de pintura componente (g):

g.drawImage(0,0, buffer);

Ao fazer o hack que você fez você está perdendo portablity e também Sice você está expondo implementação objeto particular você também pode quebrar outras coisas.

Espero que isto ajude.

Respondeu 17/09/2008 em 19:45
fonte usuário

votos
0

Com base no javadoc para LWUIT e J2ME e supondo que a classe J2ME personalizado é um Canvas parece que você teria que:

  • Subclasse classe Component do LWUIT envolvendo o componente J2ME personalizado
  • Substitua o método paint () do Componente LWUIT
  • Subclasse a classe J2ME Gráficos envolvimento da classe LWUIT Gráficos e passar todo o método chama através
  • Passar para a implementação J2ME Gráficos envolveu com o método de pintura do componente J2ME personalizado

Essa terceira etapa é um feio. Verifique na lista de discussão LWUIT para ver se alguém tem cúpula isso antes. A partir das APIs publicadas Não vejo outra maneira de fazê-lo.

Edit: O hack adicionado na questão parece melhor do que o meu corte de uma imagem. O que eu tenho pode ser melhor para um caso geral, mas eu também não sei LWUIT ou J2ME bem o suficiente para realmente dizer isso.

Respondeu 08/09/2008 em 01:52
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more