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.
Komentáře