Проблема с getGraphics()
В чем ошибка?
import javax.microedition.midlet.*; public class Midlet extends MIDlet { public void startApp() { javax.microedition.lcdui.Display.getDisplay(this). setCurrent(new MIDPCanvas()); } public void pauseApp() { } public void destroyApp(boolean unconditional) { } } import javax.microedition.lcdui.*; public class MIDPCanvas extends Canvas { public NewClass NC; public MIDPCanvas() { NC = new NewClass(); } public void paint(Graphics g) { for (int i = 0; i < 255; i++) { g.drawImage(NC.I, 10, 10, 20); repaint(); } } } import javax.microedition.lcdui.*; public class NewClass { public Image I; public NewClass() { try { I = Image.createImage("/Back.png"); Graphics G = I.getGraphics();/// Ошибка возикает здесь /// G.setColor(0x00ff00); G.fillRect(0, 0, 10, 10); } catch (Exception Ex) { Ex.printStackTrace(); } } } java.lang.IllegalStateException at javax.microedition.lcdui.Image.getGraphics(), bci=16 at NewClass.<init>(NewClass.java:11) at MIDPCanvas.<init>(MIDPCanvas.java:9) at Midlet.startApp(Midlet.java:7) at javax.microedition.midlet.MIDletTunnelImpl.callSta rtApp(), bci=1 at com.sun.midp.midlet.MIDletPeer.startApp(), bci=7 at com.sun.midp.midlet.MIDletStateHandler.startSuite( ), bci=269 at com.sun.midp.main.AbstractMIDletSuiteLoader.startS uite(), bci=52 at com.sun.midp.main.CldcMIDletSuiteLoader.startSuite (), bci=8 at com.sun.midp.main.AbstractMIDletSuiteLoader.runMID letSuite(), bci=161 at com.sun.midp.main.AppIsolateMIDletSuiteLoader.main (), bci=26 javacall_lifecycle_state_changed() lifecycle: event is JAVACALL_LIFECYCLE_MIDLET_SHUTDOWNstatus is JAVACALL_OK NetBeans IDE 6.9 |
Ответ: Проблема с getGraphics()
Первая (логичная) приходящая в голову мысль - файла нет, или он назван не так (Back.png != back.png). Попробуйте вставить следующие две строчки после I = Image...:
Код:
System.out.println("Image width: " + I.getWidth()); |
Ответ: Проблема с getGraphics()
foldel, тут дело в том, что нельзя рисовать в "неизменяющиеся" (immutable) картинки. загруженная из файла картинка именно такой и является.
Как быть? Вот: а. Грузишь свою картинку из файла [img1] б. Создаёшь новую картинку, с размерами той, которую грузил, через Image.createImage(width, height) [img2] в. Получаешь Graphics у картинки img2 [gfx] г. Рисуешь в gfx картинку img1 д. Рисуешь в gfx всё что нужно было нарисовать поверх img1 Замечание: при создании картинки img2 она заливается белым фоном автоматически, поэтому теряется прозрачность, если она была в img1. Вернуть её можно, пробежав по всем пикселям картинки img2 и заменив точки с цветом фона на точки с цветом 0. Пиксели можно получить через img2.getRGB(), а заново картинку создать через Image.createRGBImage(). |
Часовой пояс GMT +4, время: 07:13. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot