[100分求教]用J2ME/MIDP2.0如何将低分辨率图片扩大显示出来?

Muphinx 2004-08-23 11:10:46
各位高手,我发现不管是用ImageItem.setImage(...)还是Graphics.drawImage(...)
好像都只能将图片按原分辨率显示出来.我做了一个MIDlet将160 * 120的JPG
在Moto A760上显示出来,因为A760屏幕较大,图片显得很小,我想将图片扩大显示出来
但是前提是不改变图片的分辨率,不知道有什么办法没有?

请各位高手指教,绝对给分~
...全文
152 点赞 收藏 10
写回复
10 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
Muphinx 2004-08-25
十分感谢ashram(孤鸿)的耐心指教~我明白该怎么弄了
也谢谢yg1982(游)的启发~

OK,这就结贴给分
回复
sniper_bat 2004-08-24
哈哈,孤鸿的贴子,顶一下.
顺便也帮我顶一下...
:P
http://community.csdn.net/Expert/topic/3295/3295330.xml?temp=.225033
回复
ashram 2004-08-24
随便说一下,上面提供的方法如果扩大的太多回产生锯齿,如果用双线形插值可以解决锯齿的问题。可是双线形插值速度太慢一般是不能接受的,只是从技术角度来说双线形插值值得去了解。
回复
yg1982 2004-08-24
up,不错
回复
ashram 2004-08-24
我再说明一下思想吧,就是比如原图是10*10,要扩展到100*100;那先扩展成100*10就是先变成宽的图形,我们把图形看成由100条树直且长度为10的线条组成。具体作法是:那扩展后图形的前10条线都对应原图的第一条,那就在前10条线上画上原图的第一条线,其他的依次类推,这样我们就得到一张高于原图一样,但较宽的图形。在用相同的方法加工的得到的图片,不过这次是把图形看成一条条横的线组成的。即在高度上进行扩展。最后的到想要的图片。
回复
ashram 2004-08-24
yg1982(游) 的方法只适用于J2SE因为SE中有
g.drawImage(Image img,int x,int y,int Width,int Height, ImageObserver observer) ;
这样的方法,这个方法本身就可缩放图象。

真的要做也不是不可以,不过比较麻烦,而且消耗比较多的处理时间。如果性能好的机器可以考虑使用。
public Image scaleImg(Image src,int dstW,int dstH)
{
int srcW = src.getWidth();
int srcH = src.getHeight();

Image buf1 = Image.createImage(dstW,srcH);
Graphics bg = buf1.getGraphics();

int srcX=0;
for(int x = 0;x<dstW;x++)//先横向扩展
{
srcX = x*srcW/dstW;//求扩展后的某点X所对应的原图上的X
bg.setClip(x,0,1,srcH);
bg.drawImage(src,x-srcX,0,0);
}

Image buf2 = Image.createImage(dstW,dstH);
bg = buf2.getGraphics();

int srcY = 0;
for(int y=0;y<dstH;y++)
{
srcY = y*srcH/dstH;
bg.setClip(0,y,dstW,1);
bg.drawImage(buf1,0,y-srcY,0);
}
return buf2;

}
回复
yg1982 2004-08-24
不好意思,没看清楚你上面的话,上面这个方法要新生成一张图片。
如果要像你说的那样,你需要先将图片转化为数组,然后再对数组作处理,具体方法应该是取渐近色吧。也就是说,在两个数组值之间加一个值,大小为前后两个值的平均数,但这好像只能扩大相应倍数。
回复
yg1982 2004-08-24
给你代码,这是csdn上一个朋友的,具体名字忘了,可以将图片放大(不过是用j2se),希望对你有帮助.
import java.io.*;
import java.awt.*;
import java.awt.image.*;
import com.sun.image.codec.jpeg.*;

public class ResizeImage {
public static void main(String[] args) {
try {
//源图片
String imageFile = "C:/Documents and Settings/ghost/My Documents/My Pictures/1.jpg";
InputStream imageIn = new FileInputStream(new File(imageFile));
JPEGImageDecoder decoder = JPEGCodec.createJPEGDecoder(imageIn);
BufferedImage im = decoder.decodeAsBufferedImage();


int imh = im.getHeight(null);
int imw = im.getWidth(null);
int multiple = 2; //放大倍数
BufferedImage imout = new BufferedImage(imw * multiple, imh * multiple, 1);
Graphics g = imout.getGraphics();
g.drawImage(im, 0, 0, imw * multiple, imh * multiple, null);


//目的图片
FileOutputStream output = new FileOutputStream("C:/Documents and Settings/ghost/My Documents/My Pictures/2.jpg");
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(output);
encoder.encode(imout);

imageIn.close();
output.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}


回复
artmouse 2004-08-24
感觉这个东西比较困难,好像没有直接的方法可以这样的,除非你自己弄,按插值的方法做出来
回复
Muphinx 2004-08-24
没有人会吗?就是说我想把一张160 * 120的图片“放大”显示出来,但是不能改变该图片本身的分辨率,有什么办法吗?
回复
相关推荐
发帖
J2ME
创建于2007-09-28

1.3w+

社区成员

Java J2ME
申请成为版主
帖子事件
创建了帖子
2004-08-23 11:10
社区公告
暂无公告