[J2ME] wczytanie dużego zdjęcia problem z pamięcią

0

Witam wszystkich,
Tworzę midlet który docelowo ma wykonywać proste przetwarzanie obrazu. Problem polega na tym, że w momencie w którym chcę wczytać zdjęcie o rozmiarach 1600x1200(zrobione wcześniej komórką) W NetBeans-ie występuje błąd java.lang.OutOfMemoryError. (przy zdjęciach o rozmiarach 640x480 problem nie występuje). Co ciekawe po przeniesieniu aplikacji na telefon (nokia e51) problemu już nie ma.
Wnioskuje z tego, że komórka przydziela większą ilość pamięci dla midletu niż NetBeans.
Czy jest jakaś możliwość zwiększenia w NetBeansie ilości dostępnej pamięci ?
W moim przypadku byłoby to najlepsze rozwiązanie (o ile jest możliwe) ponieważ podczas pracy nad zdjęciem o rozmiarach 640x480 a dokladniej zmiany jego rozmiaru też występuje problem braku pamięci...
Byłbym bardzo wdzięczny za pomoc....

0

Po pierwsze pecet dziękuję za pomoc - infrmacje okazaly sie przydatne jednak problem dalej występuje...
Mianowicie po zmianie pliku netbeans.conf na wartości:

-J-Xss5m -J-Xms1024m -J-Xmx1024m -J-XX:PermSize=35m -J-XX:MaxPermSize=400m
( oryginalnie: -J-Xss2m -J-Xms35m -J-Xmx512m -J-XX:PermSize=35m -J-XX:MaxPermSize=200m)

Dalej wyskakuje problem braku pamieci... jezeli zwiększam Xmx jeszcze bardziej to JVM nie startuje.

Czy orientuje się ktoś jak inaczej można rozwiązać ten problem? Ewentualnie może przyczyna tkwi gdzie indziej? Nie wydaje mi się że j2me nie pozwala wczytac zdjecia o rozdzielczości 1600x1200...

problem wyskakuje nawet przy tak prostym kodzie jak poniższy:

public class TryMidlet extends MIDlet implements CommandListener {
private Image image;
private Display display;
private Form processing;
private Form start;
private Command read;
private Command back;
private ImageItem imageItem;

public TryMidlet(){
    display = Display.getDisplay(this);

    back = new Command("Wróć",Command.BACK,1);
    read = new Command("wczytaj", Command.OK , 2);


    start = new Form("wczytaj zdjecie");
    start.addCommand(read);
    start.addCommand(back);
    start.setCommandListener(this);


    processing = new Form ("Wczytane zdjęcie");
    processing.addCommand(back);
    processing.setCommandListener(this);

    display.setCurrent(start);
}

 public void commandAction(Command c, Displayable d) {
    if(d==start){
        if (c == back){
            this.destroyApp(true);
            this.notifyDestroyed();
        }
        else{
            doSnap();
            display.setCurrent(processing);
        }
    }
    if(d==processing){
        if(c == back){
            display.setCurrent(start);
        }
   }
}
private void doSnap() {
    try{
        System.out.println("before_read");
    image = Image.createImage("/main/4.jpg");
}
    catch (Exception e){
        System.out.println("blad");
        e.printStackTrace();
    }
    if(image!=null){
        imageItem = new ImageItem("zdjęcie", image, Item.PLAIN, "");
        int height;
        String st;

        height = image.getHeight();
        st = Integer.toString(height);
        if(processing.size()==0){
            processing.append(st);
            processing.insert(0,imageItem);
        }
        else{
            processing.set(0,imageItem);
        }
    }
}

Będe wdzięczny za wszelkie sugestie i pomoc... Pozdrawiam :)

0

Aktualnie nie mam zainstalowanego żadnego emulatora, ale czy przypadkiem niemożna tego ustawić w opcjach emulatora (a nie NetBeansa)? Szukałeś tam?

0

Sprawdź czy jesteś w stanie stworzyć tablicę bajtową o wielkości 7500 elementów, czyli przydzielić sobie 7,5 MB spójnego obszaru pamięci (tyle ile ma zdjęcie). Jeżeli będziesz w stanie przydzielić sobie pod rząd 4 takie tablice, to problem leży gdzieś poza managerem pamięci. Być może w metodach, które używasz (nieprawidłowo?).

1 użytkowników online, w tym zalogowanych: 0, gości: 1