ví dụ đơn giản về load ảnh trong J2ME

thanzeus

New Member
15/6/10
62
0
0
sửa đoạn

Code:
 this.image = Image.createImage("/mobile.png");
sao cho phù hợp với link ảnh nhé!


Code:
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;

public class SlideImage extends MIDlet{
  private Display display;
  private SimpleSlidingCanvas canvas;
  
  public void startApp(){
    canvas = new SimpleSlidingCanvas();
    display = Display.getDisplay(this);
    display.setCurrent(canvas);
  }

  public void pauseApp(){}

  public void destroyApp(boolean unconditional){
    notifyDestroyed();
  }
}

class SimpleSlidingCanvas extends Canvas implements Runnable{
  Image image = null;

  public SimpleSlidingCanvas(){
    try{
      this.image = Image.createImage("/mobile.png");
      new Thread(this).start();
    }catch(Exception e){
      e.printStackTrace();
    }
  }

  public void run(){
    while(true){
      repaint();
      try{
        synchronized(this){
          wait(50L);
        }
      }catch(Exception e){
        e.printStackTrace();
      }
    }
  }

  protected void paint(Graphics g){
    g.setColor(0xffffff);
    g.fillRect(0, 0, getWidth(), getHeight());

    if(image != null){
      g.drawImage(image, getWidth() / 2, getHeight() / 2, Graphics.HCENTER
      | Graphics.VCENTER);
    } else {
      g.setColor(0x000000);
      g.drawString("No image available", getWidth() / 2, getHeight() / 2, 
      Graphics.HCENTER | Graphics.BASELINE);
    }
  }
}
 

chuotfx

Member
4/4/10
365
25
18
Ðề: ví dụ đơn giản về load ảnh trong J2ME

ví dụ hay đó,mà nếu kô dùng làm game thì kô cần dùng luồng,chĩ cần có sự kiện thì gọi repaint là đc rồi.

Còn 1 vấn đề là bức ảnh lớn hơn kích thức màng hình,thì nó sẽ kô hiễn thị hết bức ảnh.

Sau đây bổ sung thêm code resize ảnh cho phù hợp:

PHP:
import javax.microedition.lcdui.Image;

public class ReSize  {
   // public Image newIm=null;
    public static Image resize(Image oldIm,int newW,int newH){

       Image newIm=null;
        int oldW=oldIm.getWidth();
	int oldH=oldIm.getHeight();

            // tạo 1 mãng chứa các RGB
        int[] arrOld=new int[oldW*oldH];
	int[] arrNew=new int[newW*newH];

        oldIm.getRGB(arrOld, 0, oldW,0, 0, oldW, oldH);
                 //mãng dữ liệu cũ,địa chĩ oFfset,độ dài 1 hàng,tọa độ góc trên,tọa độ góc dưới

        // ánh xạ từng điểm qua bên New
        for(int i=0;i<newH;i++){
			int temp=i*oldH/newH;
			for(int j=0;j<newW;j++){
				arrNew[i*newW+j]=arrOld[temp*oldW+j*oldW/newW];
			}
		}

        //tạo 1 IMAGE bằng dữ liệu cũ
        newIm =Image.createRGBImage(arrNew, newW, newH, true);
	return newIm;
    }
}
 

thanzeus

New Member
15/6/10
62
0
0
Ðề: ví dụ đơn giản về load ảnh trong J2ME

nếu trong game mà A resize thì ví dụ hình ảnh của map đang là to bị resize cho nhỏ = màn hình điện thoại chi chơi sao được A ^^! không biết E hiểu nt đã đúng ý A chưa
 

chuotfx

Member
4/4/10
365
25
18
Ðề: ví dụ đơn giản về load ảnh trong J2ME

nếu trong game mà A resize thì ví dụ hình ảnh của map đang là to bị resize cho nhỏ = màn hình điện thoại chi chơi sao được A ^^! không biết E hiểu nt đã đúng ý A chưa
nếu như thế thì sao resize đc em,vì ảnh nên để mình còn di chuyển qua lại.Cái này là resize 1 bức ảnh thui,thì có cách này cách kia cho đẹp thui mà,như em lúc load game ra,vào menu,nếu hình nền menu quá lớn thì sao,mình nên resize lại cho phù hợp thui à
 

thanzeus

New Member
15/6/10
62
0
0
Ðề: ví dụ đơn giản về load ảnh trong J2ME

À. Ý e là làm game nhập vai (background di chuyển) thì mình k cần resize. Hj
 

baccomz

New Member
28/8/11
4
1
0
Ðề: ví dụ đơn giản về load ảnh trong J2ME

Các bác ơi,,,giờ e mới bắt đầu học Java mà đã phải làm cái Project về Mobile rồi, e đọc code chỉ hiểu chút chút nhưng e vẫn k biết cách từ code làm sao để biến nó thành 1 chương trình hay 1 ứng dụng cụ thể được, các bác chỉ giúp e naz.
Tks các bác nhiều
 

Slim.getName()

New Member
11/4/12
2
0
1
Ðề: ví dụ đơn giản về load ảnh trong J2ME

Click chuột phải vào project rồi chọn deploy là xong:D
 

MrPhuongDeE

New Member
12/4/12
4
0
1
Ðề: ví dụ đơn giản về load ảnh trong J2ME

Mình mới bắt đầu học J2Me, mới download + cài đặt bộ Java Me Platform SKD 3.0 về (tại cái java writeless toolkit giờ không còn link down nữa).
Mình có coppy ví dụ của bạn về nhưng mình băn khoăn không biết phải lưu hình ảnh vào thư mục nào trong project ( build, dist, nbproject, src).
Bạn nào biết thì chỉ dùm mình với nhé, nhân đây ai có link down "java writeless toolkit" thì share cho mình với nhé.
Cảm ơn các bạn :D.
 

cungayngo

New Member
28/2/11
13
1
3
Ðề: ví dụ đơn giản về load ảnh trong J2ME

Mình mới bắt đầu học J2Me, mới download + cài đặt bộ Java Me Platform SKD 3.0 về (tại cái java writeless toolkit giờ không còn link down nữa).
Mình có coppy ví dụ của bạn về nhưng mình băn khoăn không biết phải lưu hình ảnh vào thư mục nào trong project ( build, dist, nbproject, src).
Bạn nào biết thì chỉ dùm mình với nhé, nhân đây ai có link down "java writeless toolkit" thì share cho mình với nhé.
Cảm ơn các bạn :D.
cho vào src nha bn.. t cũng mới học cái này...... hehe
 

dangvansang

New Member
24/5/12
3
0
1
28
Bác nào giúp em với! :(
em đang làm cái game ô số (tự nghĩ) nhưng :
khi sử dụng hàm getKeyState và phương thức keyPress() thì có vấn đề.
KeyPress() thì không thấy bắt phím còn cái pt input() dùng getKeyState thì nó chạy lung tung hết cả lên.luk thì nó chạy bình thường (ít) luk thì nó chạy cứ như mình nhấn phím hai lần

code đoạn chương tringf đấy như sau:

Code:
import java.io.IOException;

import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.game.GameCanvas;
import javax.microedition.lcdui.game.Sprite;
import javax.microedition.lcdui.game.TiledLayer;
 
public class OsoCanvas extends GameCanvas implements Runnable{

int x,y;//chieu dai va cao cua man hinh
    int n,d;//chieu ngang cua o so,chieu doc cua o so
    Image img;
    boolean b,b1;//b:xac dinh thread chay hay khong;b1:xac nhan o so thu nhat da duoc chon hay chua
    public TiledLayer background;
    public Graphics g;
    String[] s={"8+9","6","73","11+48","19+54","9",
            "25+25","83+8","26+7","41","91","13","16","27","12+12",
            "9+0","11+30","18+56","87","29+58","24","74","6+7","13+8","7+10",
            "21","33","59","2+4","8+8","22+5","50"
        };
    int[] c={24,28,4,27,2,15,31,10,
             26,16,7,22,29,30,20,5,
             9,21,19,18,14,17,11,25,
             0,23,8,3,1,12,13,6
    };
    int [][] cells={
                    {1,2,3,4},
                    {5,6,7,8},
                    {9,10,11,12},
                    {13,14,15,16},
                    {17,18,19,20},
                    {21,22,23,24},
                    {25,26,27,28},
                    {29,30,31,32}
                };
    Sprite sp1,sp2;
    int sp1_x;//luu hoanh do hien tai cua sp1
    int sp1_y;//luu tung do hien tai cua sp1
    int sp2_x;//luu hoanh do hien tai cua sp2
    int sp2_y;//luu tung do hien tai cua sp2
    int sp1_frame;//luu o hien tai dang duoc tro toi
    int sp2_frame;//luu o hien tai dang duoc tro toi

protected OsoCanvas() {
super(true);
x=getWidth();
      y=getHeight();
      n=x/4;
      d=y/8;
      sp1=new Sprite(load(2), n, d);
      sp2=new Sprite(load(2), n, d);
      sp1_x=0;
      sp1_y=0;
      sp2_x=0;
      sp2_y=0;
      sp1_frame=0;
      sp2_frame=0;
      background=new TiledLayer(4, 8, load(0), n, d);
      b1=true;
}

public void draw1(Graphics g, int x0, int y0, String s){
        g.setColor(0x000040);
        g.fillRect(x0, y0, n, d);
        g.setColor(0x5500ff);
        g.drawRect(x0, y0, n, d);
        g.drawRect(x0, y0, n-1, d-1);
        g.drawRect(x0, y0, n+1, d+1);
        g.setColor(0x00ff00);
        g.drawString(s, x0+n/2, y0+d/2+6,Graphics.HCENTER|Graphics.BASELINE);

    }
        public void draw2(Graphics g, int x0, int y0, String s){
        g.setColor(0x0f009f);
        g.fillRect(x0, y0, n, d);
        g.setColor(0x550000);
        g.drawRect(x0, y0, n, d);
        g.drawRect(x0, y0, n-1, d-1);
        g.drawRect(x0, y0, n+1, d+1);
        g.setColor(0x555555);
        g.drawString(s, x0+n/2, y0+d/2+6,Graphics.HCENTER|Graphics.BASELINE);

    }
    public Image load(int i){
        Image imgS = Image.createImage(getWidth(), getHeight());
        Graphics gimg = imgS.getGraphics();
        for(int j=0;j<4;j++)
            for(int k=0;k<8;k++){
                if(i==0){
                    draw1(gimg,j*n,k*d,  s[j*8+k]);
                }
                else{
                    draw2(gimg,j*n,k*d,  s[j*8+k]);
                }
            }
        return imgS;
    }
    public void flushKey(){
        getKeyStates();
    }

    public void start(){
        Thread t = new Thread(this);
        b=true;
        t.start();
    }
    public void stop(){
        b=false;
    }

public void run() {

g=getGraphics();
        while(b){
            input();
            painip(g);
            flushGraphics();
            try {
                Thread.sleep(100);
            } catch (InterruptedException ex) {
                ex.printStackTrace();
            }
        }
}

    public void painip(Graphics g){
           g.setColor(0xffffff);
           g.fillRect(0, 0, getWidth(), getHeight());
           g.setColor(0x0000ff);
           //input(keyStates);
           Image image=null;
           //image=getAnh1();
           //g.drawImage(image,0, 0, Graphics.TOP|Graphics.LEFT)    ;
           for (int row = 0; row < 8; row++) {
               for (int col = 0; col < 4; col++) {
                   background.setCell(col, row, cells[row][col]);
               }
           }
           background.paint(g);
           sp1.setFrame(sp1_frame);
           sp1.setPosition(sp1_x, sp1_y);
           //sp1.paint(g);
           if(b1==false){
               sp2.setFrame(sp2_frame);
               sp2.setPosition(sp2_x, sp2_y);
               sp2.paint(g);
           }
           //draw2(g, sp1_x, sp1_y, s[sp1_frame]);
           g.drawString("x", sp1_x, sp1_y, Graphics.BASELINE|Graphics.HCENTER);
   }

    public Image getAnh1()  {
        Image imgs=null;
        if (imgs == null) {
            try {
                // write pre-init user code here
                imgs = Image.createImage("/platform_tiles.png");
            } catch (IOException ex) {
                imgs= null;
            }
        }
        return imgs;
        }
  public void input() {
       int keyStates=getKeyStates();
       if(b1==true){
           // Left
              if ((keyStates & LEFT_PRESSED) != 0) {
                   sp1_x=sp1_x-n;
                   if(sp1_x<0) {
                       sp1_x=x-n;
                       sp1_frame=sp1_frame+3;
                   }
                   else{
                       sp1_frame=sp1_frame-1;
                   }
           }
           // Right
           if ((keyStates & RIGHT_PRESSED) !=0 ) {
                   sp1_x+=n;
                   if((sp1_x+2)>x) {
                       sp1_x=0;
                       sp1_frame-=3;
                   }
                   else{
                       sp1_frame++;
                   }
           }

           // Up
           if ((keyStates & UP_PRESSED) != 0) {
                   sp1_y-=d;
                   if(sp1_y<0) {
                       sp1_y=y-d;
                       sp1_frame+=28;
                   }
                   else{
                       sp1_frame-=4;
                   }
           }

           // Down
           if ((keyStates & DOWN_PRESSED) !=0) {
               sp1_y+=d;
               if((sp1_y+2)>y) {
                   sp1_y=0;
                   sp1_frame-=28;
               }
               else{
                   sp1_frame+=4;
               }
           }
           if((keyStates & FIRE_PRESSED)!=0){
               sp2_x=sp1_x;
               sp2_y=sp1_y;
               sp2_frame=sp1_frame;
               b1=false;
           }
       }
       if(b1==false){
           if ((keyStates & LEFT_PRESSED) != 0) {
               sp2_x=sp2_x-n;
               if(sp2_x<0) {
                   sp2_x=x-n;
                   sp2_frame=sp2_frame+3;
               }
               else{
                   sp2_frame=sp2_frame-1;
               }
           }
           // Right
           if ((keyStates & RIGHT_PRESSED) !=0 ) {
               sp2_x+=n;
               if((sp2_x+2)>x) {
                   sp2_x=0;
                   sp2_frame-=3;
               }
               else{
                   sp2_frame++;
               }
           }

           // Up
           if ((keyStates & UP_PRESSED) != 0) {
               sp2_y-=d;
               if(sp2_y<0) {
                   sp2_y=y-d;
                   sp2_frame+=28;
               }
               else{
                   sp2_frame-=4;
               }
           }

           // Down
           if ((keyStates & DOWN_PRESSED) !=0) {
               sp2_y+=d;
               if((sp2_y+2)>y) {
                   sp2_y=0;
                   sp2_frame-=28;
               }
               else{
                   sp2_frame+=4;
               }
           }
           if((keyStates & FIRE_PRESSED)!=0){
               if(sp2_frame==c[sp1_frame]){
                   cells[sp1_frame/4][sp1_frame%4]=0;
                   cells[sp2_frame/4][sp2_frame%4]=0;
                   b1=true;
               }
               else{
                   sp1_x=sp2_x;
                   sp1_y=sp2_y;
                   sp1_frame=sp2_frame;
               }
           }
       }
   }
       protected void keyPressed(int keyCode) {
             switch (keyCode) {

           case KEY_NUM2:
               sp1_y-=d;
               if(sp1_y<0) {
                   sp1_y=y-d;
                   sp1_frame+=28;
               }
               else{
                   sp1_frame-=4;
               }
               break ;
           case KEY_NUM8:
                sp1_y+=d;
               if((sp1_y+2)>y) {
                   sp1_y=0;
                   sp1_frame-=28;
               }
               else{
                   sp1_frame+=4;
               }
               break ;
           case KEY_NUM4:
               sp1_x=sp1_x-n;
               if(sp1_x<0) {
                   sp1_x=x-n;
                   sp1_frame=sp1_frame+3;
               }
               else{
                   sp1_frame=sp1_frame-1;
               }
               break ;
           case KEY_NUM6:
               sp1_x+=n;
               if((sp1_x+2)>x) {
                   sp1_x=0;
                   sp1_frame-=3;
               }
               else{
                   sp1_frame++;
               }
               break ;
   }
}
 
}
 
}
 

Never_give_up

New Member
18/6/12
11
1
3
Hà Nội
thegioiao.tk
Cho mình hỏi là cái file ảnh kia mình tạo thư mục có tên res trong thư mục của Project rồi copy ảnh vào đó à, hay copy ảnh vào thư mục src? Sao mình code đúng rồi mà run vẫn không hiển thị đc ảnh, hic
 

Never_give_up

New Member
18/6/12
11
1
3
Hà Nội
thegioiao.tk
à mình làm được rồi, thì ra là tại cái máy ảo của Netbeans nó bị lỗi, cài lại netbeans chạy ngon lành rồi :D
Cơ mà j2me chỉ load đc ảnh png thôi à, định dạng khác ko load đc à ?
 

Thụ Nguyễn

New Member
11/12/12
1
0
1
30
Em hỏi chút...giờ em mới bước chân vào J2ME ..còn nhiều khó khăn mong các pro đi trước chỉ bảo ạ
Sao khi em tạo private SimpleSlidingCanvas canvas; thì nó báo lỗi 'SimpleSlidingCanvas ' nhỉ :(
 

mhung08

New Member
20/11/11
8
0
1
mình muốn khi kích vào 1 nút thì 1 forder hiện lên (trong thẻ nhớ hoặc thư mục của project) và khi kích vào tên ảnh+ nút ok thì ảnh sẽ được load trên màn hình điện thoại.
bạn nào có thể giúp mình được không?