Как я могу перекрасить часть экрана на BlackBerry во время соединения? - PullRequest
0 голосов
/ 12 ноября 2010

У меня два вопроса.

Первое касается обновления пользовательского интерфейса, второе - когда я пытаюсь подключиться к камере, чтобы получить поток mjpeg и запустить getResponseCode (), приложение там блокируется. MDS показывает много передачи данных.

У меня есть несколько классов, таких как ....:

Http extends Thread {
  public abstract String getUrl();
  public abstract String getBase64Encode();
  public abstract void onReturn(int responseCode, InputStream is,int lenght);
  protected abstract void onError(Exception e);
}

CameraHttp расширяет Http, а MjpegHttp расширяет CameraHttp.

http подключается к URL-адресу, который является адресом камеры jpeg или mjpeg.

У меня есть класс камеры. Он устанавливает соединение с переопределенным методом mjpegconnection.go (); У меня также есть статическое растровое изображение на экране ViewCam, которое расширяет MainScreen.

После запуска:

url = getUrl();
queryString = encodeURL(queryString);
byte postmsg[] = queryString.getBytes("UTF-8");
httpConnection = (HttpConnection) Connector.open(url
    + ";deviceside=false", Connector.READ_WRITE);
httpConnection.setRequestMethod(HttpConnection.GET);
httpConnection.setRequestProperty("Authorization", getBase64Encode());
os = httpConnection.openDataOutputStream(); 

for (int i = 0; i < postmsg.length; i++) {
    os.write(postmsg[i]);
}
{
     if (!cancel) {
         System.out.println(httpConnection.getURL()+ 
             " *****"+httpConnection.getPort());
         System.out.println("onreturn oncesi"
             + httpConnection.getResponseCode());
         onReturn(httpConnection.getResponseCode(), httpConnection
             .openInputStream(),(int) httpConnection.getLength());

         System.out.println("onreturn sornrası");
     }
     os.close();
     httpConnection.close();
}
} catch (Exception e) {
    System.out.println("hata " + e.getMessage());
    try {
        httpConnection.close();
        Thread.sleep(60);
    } catch (Exception ie) {
}
onError(e);
}

После дозировки

 // decides mjpeg-jpeg stream
 // if it is mjpeg, direct to parser,
 // else it sets image with setImage() and return to connection with go();
 public void parse(InputStream is, int lenght) {
     try {
         if (!type.isMjpegStream()) {
             setImage(is, lenght);
             System.gc();
             StaticVar.ActiveCam.setConnected(true);
         } else { 
             if (parser == null) {
             parser = new JpegParser(is, this);
         } else {
             parser.setInputSteam(is, this);
         }
         parser.parse();
         is.close();
     }
     } catch (Exception e) {
     } 
}

и

 public void setImage(InputStream is, int lenght) {
     byte[] raw = new byte[lenght];
     try {
         is.read(raw);
         currentImage = Bitmap.createBitmapFromBytes(raw, 0, raw.length, 1);
         ViewCam.ViewCam=currentImage;       //static var.
     } catch (IOException e) {
         System.out.println("catche***********");
         // TODO Auto-generated catch block
         e.printStackTrace();
     }
 }

Как мне перекрасить экран, чтобы показать растровое изображение?

И моя ViewCam

public class ViewCam extends MainScreen {
Header header;
String headerString;
public static Bitmap ViewCam;// cam image shows
private static Thread My;// runs connection

void OnStart() {
    My = new Thread() {
        public void run() {
            System.out.println("ONSTART");
            StaticVar.ActiveCam.go();
        };
    };
    My.start();
    Bitmap bitmap = Bitmap.getBitmapResource("res/main.png");
    Bitmap bmp2 = ResizeImage.resizeBitmap(bitmap, Display.getWidth(),
            Display.getHeight());
    Background bg = BackgroundFactory.createBitmapBackground(bmp2);
    this.setBackground(bg);
    this.getMainManager().setBackground(bg);


}


public ViewCam() {
    StaticVar.ActiveCam.getIp();

    OnStart();

    headerString ="Cam View";
    header = new Header("res/bartop.png", headerString, 0);
    add(header);

    ViewCam = Bitmap.getBitmapResource("res/spexco_splash.png");
    ViewCam = ResizeImage.bestFit(ViewCam, Display.getWidth(), Display
            .getHeight());
    BitmapField bf = new BitmapField(ViewCam);
    add(bf);
}
}

1 Ответ

1 голос
/ 12 ноября 2010

Попробуйте Screen.invalidate ()

public void invalidate (int x, int y, int width, int height)

Делает недействительной область этого экрана.
Этот метод отмечает область этого экрана как нуждающуюся в перерисовке. Перекраска обрабатывается позже потоком основного события.

Примечание. Любой поток может безопасно вызвать этот метод и не требует синхронизации при блокировке события.

Заменяет:
сделать недействительным в классе Manager
Параметры:
x - Левый край области в координатах ContentRect.
y - Верхний край области в координатах ContentRect.
ширина - ширина (в пикселях) региона.
высота - высота (в пикселях) региона.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...