2010-12-03 55 views
0

在我的项目中,我有一个图片,通过程序,我提取像素,操纵这些像素,然后将其保存在我的包中。是我救了它的方式是:Android:解码位图图像的问题

private void createPicture() 
{ 
    System.out.println("Inside createPicture"); 
    System.out.println(contextPath); 
    try{ 
     FileOutputStream fos = new FileOutputStream(contextPath + "/" + picName); 
     DataOutputStream dos = new DataOutputStream(fos); 

     for(int i=0; i<splitedPixel.length; i++) 
      dos.writeByte(splitedPixel[i]); 

     dos.flush(); 
     dos.close(); 
    } 
    catch(IOException e){ 
     System.out.println("IOException : " + e); 
    } 
    System.out.println("Picture Created."); 
} 

所以,在此目录

/data/data/my_package_name/files/myPic.bmp

中保存我的图片现在,我想阅读这张新照片并提取这张照片的像素。我用过这种方法:

public Stego(Context context) 
{ 
    //Instantiate an ImageView and define its properties 
    contextPath = context.getFilesDir().getAbsolutePath(); 
    image = BitmapFactory.decodeFile(contextPath + "/" + picName); 

    System.out.println("Image= " + image); 
    imWidth = image.getWidth(); 
    imHeight = image.getHeight(); 
    getMaxMessageChars(); 
    System.out.println("Width: " + imWidth); 
} 

程序在这里崩溃。 logcat指示图像的结果为空,并且程序达到getWidth崩溃时。

这些书写和阅读方式是否正确? 我可以通过模拟器转到目录来检查是否创建了这张图片吗?

感谢

回答

0

我想你应该在createPicture()方法关闭fos流。

BitmapFactory.decode*()方法返回null出现错误。所以最好在解码后检查null

据我所知,只能在模拟器或根设备上从Android内部存储器保存文件。这可以使用Eclipse的DDMS透视图或Android SDK工具链中的ddms实用工具完成。只需点击设备 - >文件资源管理器并从设备中拉出文件。

如果您想从非根设备获取文件,最好将其保存到外部存储设备(sdcard)。在这种情况下,您可以将设备连接到电脑,如外置硬盘。