#ff0000 23  2006 . - #000655       J2ME MIDP 2.0
#def   ,       - .  ,   J2ME        90 .     ,         90      90, 180  270 .       .     ,       .        . 

MIDP 2.0    ,      (ARGB ).      ARGB     : www.mobilab.ru/articles/75.      . 
    ARGB . 
 ,   ARGB ,    
    . 
   ARGB 

    .        ,    . 
     : 
private Image image1;

try{
        image1 = Image.createImage("/1.png");
     }
     catch(java.io.IOException io){} 

    ARGB .    .        (ARGB_Img0),    -     (ARGB_Img1).     . ,            . 
//  
private int ARGB_Img[],ARGB_Img2[];


//   
ImW=image1.getWidth();     //
ImH=image1.getHeight();     //
//  ARGB 
      ARGB_Img0 = new int[ImW*ImH];
  ARGB_Img1= new int[ImW*ImH];
//     .
image1.getRGB(ARGB_Img,0,ImW,0,0,ImW,ImH);
 

     ,      .        ,     ,   ,      ARGB_Img1          ARGB_Img0.            .
   : 
 x0,y0     ARGB_Img0, x1,y1     ARGB_Img1, xc,yc        x0y0, numi    (xi,yi)  ARGB_Imgi . 

 ,      . 

     public void ARGB_Img_rot(int phi)
     {
      int x0,y0,x1,y1;
      int sn=sin(phi);
      int cs=cos(phi);
      for (y1=0;y1<ImH;y1++){
          for (x1=0;x1<ImW;x1++)
          {
          //      
          ARGB_Img1[y1*ImW+x1]=bgcol; 
          x0=(int) ((cs*(x1-xc)+sn*(y1-yc))/1000+xc);
          y0=(int) (-(sn*(x1-xc)-cs*(y1-yc))/1000+yc);
               //,       
               if (x0>-1)                     
                if (x0<ImW) 
                if (y0>-1)
                if(y0<ImH) 
                    {               // 
                    ARGB_Img1[y1*ImW+x1]=ARGB_Img0[y0*ImW+x0];
                    }
          }
      }
     }

    .    sin  cos,  J2ME     .      .   ,      Doom  Wolf 3D      .     : 

private int alpha[]={0,10,20,30,40,50,60,70,80,90};
private int sin_t[]={0,174,342,500,643,766,866,940,985,1000};

  alpha   (    ),   sin_t     .       0  90         .            ,      [0;90].     sin_t   ,      1000     .        ARGB_Img_rot(),  ,   . 

,        ,       , ,   26 ?          ,      .    ,         . 

   ,       . ,      10 ,          ,      .               . 
  public int sinus(int t)
     {
          int k;
          k=(int) (t/10);     
          if (t%10==0) 
               {
                    return sin_t[k];
               }
          else {
               return (int) ((sin_t[k+1]-sin_t[k])*(t%10)/10+sin_t[k]);
               }
     }

,     ,       0  90 ,      sin  cos    

public int sin(int t)
     {
     int sign=1;
     t=t%360;     //  
     if (t<0)          //  
          {
          t=-t;
          sign=-1;
          }
//  
     if (t<=90){ return sign*sinus(t);}
     else if (t<=180){ return sign*sinus(180-t);}
     else if (t<=270){ return -sign*sinus(t-180);}
     else {return -sign*sinus(360-t);}
     }
     
public int cos(int t)
     {
     t=t%360;     //  
     if (t<0) {t=-t;} //            
//  
     if (t<=90){ return sinus(90-t);}
     else if (t<=180){ return -sinus(t-90);}
     else if (t<=270){ return -sinus(270-t);}
     else {return sinus(t-270);}
     }

 .     . 

   public void paint(Graphics g)
    {
      g.setColor(150,150,150);
      // 
      g.fillRect(0,0,GrW,GrH);

      g.drawImage(image1,10,10,Graphics.TOP|Graphics.LEFT);
      g.drawRGB(ARGB_Img1,0,ImW,10,20+ImH,ImW,ImH,false);
      g.drawRGB(ARGB_Img1,0,ImW,20+ImW,10,ImW,ImH,true);
    }

    . 
         .