čtvrtek 11. října 2007

Rotace displeje v MIDP-1.0 (Java ME)

Nedávno jsem řešil problém jak rotovat zobrazení na displeji mobilního telefonu. U novějších mobilů s podporou MIDP-2.0 to není moc velký problém, slouží na to parametr transform metody Graphics.drawRegion(...). Může nabývat hodnot definovaných ve třídě Sprite např.

  • Sprite.TRANS_NONE
  • Sprite.TRANS_ROT90
  • Sprite.TRANS_MIRROR_ROT90
  • ...

U mobilů starších, které podporují pouze MIDP-1.0, je to složitější a vykreslování se musí provádět pixel po pixelu. Mé řešení je následovné:

//rotation of screen (270 degrees)
//assume: origImg.getWidth() == canvas.getHeigth()
// && origImg.getHeigth() == canvas.getWidth()
final Image rotatedImg =
  Image.createImage(origImg.getHeight(), origImg.getWidth());
final Graphics gr = rotatedImg.getGraphics();
for (int i = 0; i < rotatedImg.getWidth(); i++) {
  for (int j = 0; j < rotatedImg.getHeight(); j++) {
    gr.setClip(i, j, 1, 1);
    gr.drawImage(origImg, i - j, j + i - rotatedImg.getWidth(),
        Graphics.TOP | Graphics.LEFT);
  }
}

Zůstal jediný problém a tím je výkon. Na mém Siemensu CX75 trvá takováto rotace cca 15s a s tím se, vážení čtenáři, uživatelsky přítulný software dělat nedá. A řešení? MIDP-2.0.

Žádné komentáře: