Girar String

20/10/2007

1

Galera é o seguinte estou tentando montar uma rotação de uma string, pq no j2me isso não existe pensei da seguinte forma:

/*
 * GDrawString.java
 *
 * Created on 19 de Outubro de 2007, 10:58
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package Grafico;

import Desenho.Desenhar;
import Desenho.Ponto;
import java.util.Vector;
import javax.microedition.lcdui.Font;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;

/**
 *
 * @author Administrador
 */
public class GDrawString {
    
    /** Creates a new instance of GDrawString */
    private Graphics g;
    private Image rasc;
    private String texto;
    private Ponto pos;
    private Graphics tela;
    private double angulo;
    private Font fonte;
    double mat[][]=new double[4][4];
    private Vector lista;
    
    public GDrawString(Graphics tela,Ponto pos,String texto,double angulo) {
        fonte=tela.getFont();
        rasc=Image.createImage(fonte.stringWidth(texto),fonte.getHeight());
        this.texto=texto;
        this.pos=pos;
        this.tela=tela;
        this.angulo=angulo;
        mostrar_texto();
        gerar_mat_rot();
        rotacionar();
    }
    
    private void gerar_mat_rot(){
        mat[0][0]=Math.cos(angulo);
        mat[1][0]=Math.sin(angulo);
        mat[0][1]=-Math.sin(angulo);
        mat[1][1]=Math.cos(angulo);
    }
    
    private void rotacionar(){
        lista=new Vector();
        int lar=rasc.getWidth();
        int alt=rasc.getHeight();
        int teste=rasc.getWidth()*rasc.getHeight();
        int pixel[]=new int[rasc.getWidth()*rasc.getHeight()];
        rasc.getRGB(pixel,0,rasc.getHeight(),0,0,rasc.getWidth(),rasc.getHeight());
        int temp[][]=new int[rasc.getWidth()][rasc.getHeight()];
        int k=0;
        for(int i=0;i<rasc.getHeight();i++)
            for(int j=0;j<rasc.getHeight();j++) {
            temp[j][i]=pixel[k];
            k++;
            }
        for(int l=0;l<rasc.getHeight();l++)
            for(int c=0;c<rasc.getWidth();c++) {
            int r   = (temp[c][l] & 0x00FF0000) >> 16;
            int g = (temp[c][l] & 0x0000FF00) >> 8;
            int b  = (temp[c][l] & 0x000000FF);
            if(r==0 && g==0 && b==0){
                lista.addElement(new Ponto(c,l));
            }
            }
        int tam=lista.size();
        Ponto aux;
        tela.setColor(0);
        for(int i=0;i<tam;i++){
            aux=(Ponto)lista.elementAt(i);
            aux.set_X( (float)(aux.get_X()*mat[0][0]+aux.get_Y()*mat[0][1]) );
            aux.set_Y( (float)(aux.get_X()*mat[1][0]+aux.get_Y()*mat[1][1]) );
            aux.set_X(aux.get_X()+pos.get_X());
            aux.set_Y(aux.get_Y()+pos.get_Y());
            tela.drawLine(aux.get_intX(),aux.get_intY(),aux.get_intX(),aux.get_intY());
        }
       
    }
    
    private void mostrar_texto(){
        g=rasc.getGraphics();
        g.setColor(255,255,255);
        g.fillRect(0,0,rasc.getWidth(),rasc.getHeight());
        g.setColor(0,0,0);
        g.drawString(texto,pos.get_intX(),pos.get_intY(),Graphics.LEFT|Graphics.TOP);
        
    }
}


funciona da seguinte forma vou passar para esta classe o Graphics do componente onde será imprimido a string, a posição que deverá ser impressa a string, o texto, e o angulo que será feito a rotação;

A ideia é imprimir a string em um image com o fundo branco, e por este image eu pegar as coordenadas dos pixels em preto assim terei todos as coordenadas dos pixels necessarios para se pintar uma string;

com os pontos dos pixel, eu multiplico cada ponto por uma matriz de transformação assim resultando nas novas coordenadas rotacionadas destes pontos, teoricamente funcionaria, mas estou tento problemas no pedaço

lista=new Vector();
        int lar=rasc.getWidth();
        int alt=rasc.getHeight();
        int teste=rasc.getWidth()*rasc.getHeight();
        int pixel[]=new int[rasc.getWidth()*rasc.getHeight()];
        rasc.getRGB(pixel,0,rasc.getHeight(),0,0,rasc.getWidth(),rasc.getHeight());

na hora de jogar os pixels no vetor pixel, o codigo para ai, não estou entendo o pq disso ocorrer, alguem tem uma dica do pq isso esta ocorrendo, ou uma forma mais facil de fazer a rotação?

O que preciso é rotacionar uma string no angulo que eu quiser.


Responder
×
+1 DevUP
Acesso diário, +1 DevUP
Parabéns, você está investindo na sua carreira