2010-05-19 24 views
0

我正在使用下面的代码来调整大小并将文件保存到黑莓设备中。图像缩放后,我尝试将图像文件写入设备。但它提供了相同的数据。 (图像的高度和宽度是相同的)。我必须做重新缩放的图像文件。任何人都可以帮助我?黑莓图像重新调整和写入重新调整后的图像文件

类ResizeImage扩展MainScreen实现FieldChangeListener { 私人字符串路径= “文件:///SDCard/BlackBerry/pictures/test.jpg”; 私人ButtonField btn; ResizeImage() { btn = new ButtonField(“Write File”); btn.setChangeListener(this); add(btn); } 公共无效fieldChanged(场场,INT上下文) { 如果(场== BTN) { 尝试 {
的InputStream的inputStream = NULL; //获取文件连接 FileConnection fileConnection =(FileConnection)Connector.open(path); if(fileConnection.exists()) inputStream = fileConnection.openInputStream(); // byte data [] = inputStream.toString()。getBytes();

    ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
        int j = 0; 
        while((j=inputStream.read()) != -1) { 
        baos.write(j); 
        } 
        byte data[] = baos.toByteArray();     
        inputStream.close(); 
        fileConnection.close(); 

        WriteFile("file:///SDCard/BlackBerry/pictures/org_Image.jpg",data);   


        EncodedImage eImage = EncodedImage.createEncodedImage(data,0,data.length);        
        int scaleFactorX = Fixed32.div(Fixed32.toFP(eImage.getWidth()), Fixed32.toFP(80)); 
        int scaleFactorY = Fixed32.div(Fixed32.toFP(eImage.getHeight()), Fixed32.toFP(80)); 
        eImage=eImage.scaleImage32(scaleFactorX, scaleFactorY); 

        WriteFile("file:///SDCard/BlackBerry/pictures/resize.jpg",eImage.getData()); 

        BitmapField bit=new BitmapField(eImage.getBitmap());      
        add(bit); 

       }  
      } 
      catch(Exception e) 
      { 
       System.out.println("Exception is ==> "+e.getMessage()); 
      } 

     } 
    } 


    void WriteFile(String fileName,byte[] data) 
    { 
     FileConnection fconn = null; 
     try 
     { 
      fconn = (FileConnection) Connector.open(fileName,Connector.READ_WRITE); 
     } 
     catch (IOException e) 
     { 
      System.out.print("Error opening file"); 
     } 

     if (fconn.exists()) 
     try 
     { 
      fconn.delete(); 
     } 
     catch (IOException e) 
     { 
      System.out.print("Error deleting file"); 
     } 
     try 
     { 
      fconn.create(); 
     } 
     catch (IOException e) 
     { 
      System.out.print("Error creating file"); 
     } 
     OutputStream out = null; 
     try 
     { 
      out = fconn.openOutputStream(); 
     } 
     catch (IOException e) { 
      System.out.print("Error opening output stream"); 
     } 

     try 
     { 
      out.write(data); 
     } 
     catch (IOException e) { 
      System.out.print("Error writing to output stream"); 
     } 

     try 
     { 
      fconn.close(); 
     } 
     catch (IOException e) { 
      System.out.print("Error closing file"); 
     } 
    } 

}

回答

0

退房getScaledHeight()和getScaledWidth()在EncodedImage。

这是一个肮脏的RIM技巧。

如果您将getBitmap()的位图从getHeight()和getWidth()中剥离出来。

然后,如果您想将缩放的图像另存为jpeg,则需要重新编码。

例如

Bitmap scaledBMP = scaledEI.getBitmap(); 
JPEGEncodedImage finalJPEG = JPEGEncodedImage.encode(scaledBMP, 80); // int arg is quality 
raw_media_bytes = finalJPEG.getData(); 
raw_length = finalJPEG.getLength(); 
raw_offset = finalJPEG.getOffset(); 

// don't forget to use the length and offset info, because getData() is 
// not guaranteed to work by itself. 

AFAIK,预5.0至少没有在天然-JPEG缩放W/O转换为位图。