`
javafenger
  • 浏览: 246787 次
  • 来自: ...
文章分类
社区版块
存档分类
最新评论

J2ME发送图片到Servlet(错误修正)

阅读更多

        很抱歉,在J2ME平台发送图片到servlet那篇文章中,我忽略了一个细节没有进行数据类型的转换。这样会导致图片像素的损失,发送到服务器的图片失真。现在将代码重新更新一下,给大家带来不便还请原谅。

public synchronized void connHttp(){
while(true){
System.out.println("httpconn wait now");
if((midplet.getIsSending())){
System.out.println("search");
try{
con=(HttpConnection)Connector.open(URL);
con.setRequestMethod(HttpConnection.POST);
con.setRequestProperty("If-Modified-Since",
             "29 Oct 1999 19:43:31 GMT");
            con.setRequestProperty("User-Agent",
             "Profile/MIDP-2.0 Configuration/CLDC-1.0");
            con.setRequestProperty("Content-Language", "en-US");


os=new DataOutputStream(con.openOutputStream());
int[] rgbArg=new int[100*100];
midplet.getImage().getRGB(rgbArg,0,100,0,0,100,100);
byte[] bytes=intTobyte(rgbArg);
os.write(bytes);


//for(int i=0;i<RGBARG.LENGTH;I++){
//os.writeInt(rgbArg[i]);
//System.out.println(rgbArg[i]);
//}

os.flush();

}catch(Exception e){
System.out.println("conn err");
e.printStackTrace();
}finally{
if(os!=null){
try{
os.close();
midplet.setIsSending(false);
midplet.setIsSend(true);
}catch(IOException ioe){};
}
}

 

 

midplet.setIsSending(false);
midplet.setIsSend(true);
}
try{
wait();
}catch(Exception e){
System.out.println("wait exception");
e.printStackTrace();
}
}


}

public synchronized void wakeUP(){
notifyAll();
}
private byte[] intTobyte(int[] ints){
byte[] bytes=new byte[ints.length*4];
for(int i=0;i<INTS.LENGTH;I++){
bytes[i*4]=(byte)(0xff&(ints[i]>>>24));
bytes[i*4+1]=(byte)(0xff&(ints[i]>>>16));
bytes[i*4+2]=(byte)(0xff&(ints[i]>>>8));
bytes[i*4+3]=(byte)(0xff&(ints[i]>>>0));
if(i<100){
System.out.println(ints[i]);
}
}

return bytes;
}

客户端的,比上一次多了,一个方法intTobyte()通过这个方法,获得了一个byte类型的数组,直接发送,服务器端,在将这个byte数组还原成一个int数组

=========================================
private void createIamge(DataInputStream io,OutputStream out){
int width = 100;
int height = 100;
int[] rgb=new int[width*height];
try{
int[] bytes=new int[rgb.length*4];
//io.readu(bytes);
//rgb=byteToInt(bytes);
for(int i=0;i<BYTES.LENGTH;I++){
bytes[i]=io.readUnsignedByte();
}
byteToInt(bytes,rgb);

}catch(IOException ioe){ioe.printStackTrace();}
BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
bi.setRGB(0,0,100,100,rgb,0,100);
bi.flush();
// encode:
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bi);
param.setQuality(1.0f, false);
encoder.setJPEGEncodeParam(param);
System.out.println("yeah");
try {
encoder.encode(bi);
}
catch(IOException ioe) {
 ioe.printStackTrace();
}

}

private void byteToInt(int[] bytes,int[] rgb){

for(int i=0;i<RGB.LENGTH;I++){
rgb[i]=(
((bytes[i*4]&0xff)<<24)|
((bytes[i*4+1]&0xff)<<16)|
((bytes[i*4+2]&0xff)<<8)|
((bytes[i*4+3]&0xff)<<0));
//System.out.print(ints[i]+"\t"+(ints[i]<<8)+"\t");
if(i<100){

System.out.println(rgb[i]);

}
}


}

上面的是服务器端代码,重点在于readUnsignedByte()这方法。不然很难还原int类型。



分享到:
评论

相关推荐

    j2me 手机开发 RMS SERVLET

    本主题聚焦于在J2ME环境中进行手机应用开发,特别是涉及到了RMS(Record Management System)和Servlet两种关键的技术,用于实现数据的本地持久化和后台服务器通信。 **RMS(Record Management System)** RMS是...

    j2me.jsp.servlet.xml.正则表达式

    【标题】"j2me.jsp.servlet.xml.正则表达式" 涵盖了Java ME、JSP 2.0、Servlet以及XML这四大核心技术,它们在IT领域中都有着广泛的应用,尤其对于Java开发者和网站开发者来说至关重要。下面将详细阐述这些知识点。 ...

    J2ME+servlet+mysql查询数据

    【J2ME】:Java Micro Edition,简称J2ME,是Java平台的一个子集,主要用于嵌入式设备和移动设备的开发,如手机、智能家电等。它提供了基础的类库和API,允许开发者创建轻量级的应用程序。 【Servlet】:Servlet是...

    J2ME发送短消息源代码

    J2ME发送短消息实例 J2ME发送短消息实例 J2ME发送短消息实例

    J2me 手机发送短信示例

    在J2ME中,发送短信涉及到使用JSR-120(WMA,Wireless Messaging API)。这个API允许开发者通过GSM或CDMA网络发送和接收文本消息。关键类包括`javax.wireless.messaging.MessageConnection`和`javax.wireless....

    一个J2ME连接servlet再连数据库的例子

    在这个例子中,Servlet接收到J2ME客户端发送的查询参数,建立与数据库的连接,执行SQL查询,并处理结果。请注意,实际的数据库连接字符串、用户名、密码以及SQL语句需要根据你的具体环境进行调整。 总结来说,这个...

    J2ME从入门到精通

    **J2ME从入门到精通** Java Micro Edition(J2ME)是Java平台的一个子集,主要用于嵌入式系统和移动设备,如早期的智能手机、电视盒和家用电器。本教程将带你逐步深入J2ME的世界,理解其基本概念、开发环境搭建、...

    j2me短信发送软件

    j2me短信发送平台,与大家一起分享我的成果,谢谢支持,非常感激。。。。

    j2me 中直接 发送短信类。 SMS类。

    单独封装好的类。调用是只有两个参数。一个是 手机号码 还有一个 是 短信内容。非常简单。调试一切OK。

    手机网络游戏(J2ME+Servlet实现)

    总的来说,手机网络游戏(J2ME+Servlet实现)项目涉及到移动应用开发、服务器端编程、网络通信、数据库管理和分布式系统等多个领域的知识。开发者需要熟练掌握Java语言,理解J2ME和Servlet的工作原理,具备一定的...

    J2ME入门教程.10(j2me与Servlet相互通讯)编写和配置Servlet服务端

    import javax.servlet.*; import javax.servlet.http.*; public class MyServlet extends HttpServlet { public void doPost(HttpServletRequest request, HttpServletResponse response )throws IOException, ...

    J2ME 发短信 源码

    通过这个源码示例,开发者可以学习到实际的短信发送流程,并将其应用于自己的J2ME应用中。同时,Myeclipse和EclipseME插件提供了便捷的开发和测试环境,使得在桌面系统上模拟和调试J2ME应用成为可能。

    j2me 与jsp通信

    在接收到J2ME发送的数据后,JSP页面可以解析这些数据,执行必要的业务逻辑,比如验证、处理和存储数据。 5. **与数据库交互**:JSP可以通过Java Servlets、JavaBeans或者使用JDBC(Java Database Connectivity)API...

    基于J2ME的邮件发送

    综合以上,基于J2ME的邮件发送涉及到移动设备编程、网络通信、邮件协议和第三方库的使用等多个方面,实现这一功能需要对这些技术有深入理解。通过提供的文件,我们可以逐步构建和调试一个完整的邮件发送系统,为移动...

    j2me 上传图片代码

    在这个特定的场景中,我们讨论的是一个利用J2ME实现的图片上传功能,这涉及到客户端(用户设备上的应用)和服务器端(处理上传请求的后台系统)的交互。 客户端部分: 1. 图片选择:J2ME应用程序通常会通过文件选择...

    J2ME开发 J2ME开发 J2ME开发

    "J2ME开发.pdf"可能包含J2ME的详细教程或者最佳实践,涵盖从基础语法到高级特性的讲解,包括UI设计(如Form和Canvas类)、数据持久化(RecordStore)、网络编程(HttpConnection和Socket)以及事件处理等。...

    J2ME游戏移植到Android手机

    【J2ME游戏移植到Android手机】是一个技术性较强的主题,涉及到两个不同的移动平台:Java ME(J2ME)和Android。J2ME是早期移动设备上广泛使用的开发框架,而Android则是现代智能手机的主要操作系统。当需要将J2ME...

    J2ME 彩信接收与发送

    总的来说,J2ME MMS的接收与发送涉及到网络通信、消息解析和用户交互等多个技术点。开发者需要熟悉J2ME的API,同时对MMS协议有一定的理解,才能有效地实现这个功能。在实际开发过程中,还需要考虑不同手机平台的兼容...

    J2ME从基础到精通详细学习课件

    J2ME从基础到精通的学习,涵盖了广泛的理论和实践知识,下面将深入解析其中的关键点。 1. **J2ME架构** J2ME由配置(Configurations)和框架(Profiles)组成。配置定义了设备的基本硬件和软件能力,如Connected ...

Global site tag (gtag.js) - Google Analytics