j2me RMS 图片

j2me中一般要用到RMS,如果用RMS存储图片并取出的话,是要转化为byte[]格式的,怎样存入byte[]数据,很简单
,这个例子只是将图片格式转化为byte[]并用之构造图片。


import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;
import javax.microedition.rms.*;
import java.io.*;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Display;
public class Try extends MIDlet {

	public Try() {
		// TODO Auto-generated constructor stub
	}

	protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
		// TODO Auto-generated method stub

	}

	protected void pauseApp() {
		// TODO Auto-generated method stub

	}

	protected void startApp() throws MIDletStateChangeException {
		// TODO Auto-generated method stub
		try{
		int buffer=1024;//缓存大小
		byte[] bufferData=new byte[buffer];		
		byte[] data=null;
		//建立一个输入流,流的来源是一个图片,eclipse中的话,默认是在res文件夹下
		InputStream is=this.getClass().getResourceAsStream("1.jpg");
		//建立一个字符数组输出流,rms中只支持byte[]格式,这样方便存取RecordStore
		ByteArrayOutputStream baos=new ByteArrayOutputStream();
		//numReaded标记实际读入的字符数
		int numReaded=0;
		while(numReaded!=-1){
			//InputStream的read方法重写过一次,有不带参数的read()函数,每次只读入一个字符
			//这样很慢不适合在j2me这种小内存机器上运行。下面这个read方法是将输入流读入到字符数组
			//bufferData中,0是数组 b 中将写入数据的初始偏移量,为0表示每次从数组开头写入数据。
			//buffer表示每次最多读入buffer个字符,如果buffer为0则返回0,如果读到流的末尾返回-1
			//numReaded即read的返回值就是表示实际读入字符数组的字符数
			numReaded=is.read(bufferData, 0, buffer);
			if(numReaded!=-1){
				//在字符输出流中每次写下刚刚读入到bufferData中的数据,0是数组中的起始偏移量
				//numReaded是这次要读入的字符个数
				baos.write(bufferData, 0, numReaded);
			}
		}
		//之所以要用ByteArrayOutputStream句是为了下面这句方便将数据生成字符数组
		data=baos.toByteArray();
		baos.close();
		//创建一个Image可以用createImage方法,该方法重写过6次。也可以用
		//方法createRGBImage(rgb, width, height, processAlpha)。我现在就用
		//createImage(byte[] imageData, int imageOffset, int imageLength) 
		//和createImage(InputStream arg)这两个方法。
		//因为ByteArrayInputStream是InputStream的子类,所以可以直接用。
		
		//方法1.用字符数组
		Image img=Image.createImage(data, 0, data.length);
		
		//方法2.用字符输入流
		//ByteArrayInputStream bais=new ByteArrayInputStream(data);		
		//Image img=Image.createImage(bais);
		
		
		//下面就很简单了,Canvas没有共用的构造函数,所以每次都要自己定义一个他的子类
		//并且重写paint函数。
		ImageCanvas canvas=new ImageCanvas();
		canvas.img=img;
		canvas.repaint();
		Display dis=Display.getDisplay(this);
		dis.setCurrent(canvas);
		}
		catch(Exception e){
			e.printStackTrace();
		}
		
	}
 class ImageCanvas extends Canvas{
	public  Image img=null;
	 public void paint(Graphics g){
		 if(g!=null&&img!=null){
			 g.drawImage(img, this.getWidth()/2-img.getWidth()/2, this.getHeight()/2-img.getHeight()/2, 0);
		 }
	 }
 }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值