Android 将位图写入SD卡中的文件
我试图在我的代码中将位图压缩成jpg。我得到一个空指针异常,请给我建议Android 将位图写入SD卡中的文件,android,bitmap,Android,Bitmap,我试图在我的代码中将位图压缩成jpg。我得到一个空指针异常,请给我建议 new Thread(new Runnable() { @Override public void run() { Cursor imageCursor=getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,n
new Thread(new Runnable() {
@Override
public void run() {
Cursor imageCursor=getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,new String[]{MediaStore.Video.Media.DATA},MediaStore.Video.Media.DISPLAY_NAME+"=?" ,new String[]{imageTitle},null);
imageCursor.moveToFirst();
final String imageData=imageCursor.getString(imageCursor.getColumnIndex(MediaStore.Video.Media.DATA));
dbConnection connection=new dbConnection(getApplicationContext());
SQLiteDatabase db=connection.getWritableDatabase();
File imageFile=new File(imageData);
File outputFile=new File("mnt/sdcard/Images/hiddenImage.jpg");
InputStream is;
try
{
is = new FileInputStream(imageFile);
InputStreamReader inputreader=new InputStreamReader(is);
BufferedReader buffReader=new BufferedReader(inputreader);
final ByteArrayBuffer buffer=new ByteArrayBuffer(512);
int i;
while((i=buffReader.read())!=-1)
{
buffer.append(i);
}
Bitmap imagefile=BitmapFactory.decodeByteArray(buffer.toByteArray(), 0, buffer.toByteArray().length);
OutputStream os=new FileOutputStream("mnt/sdcard/Images/testing.jpg");
imagefile.compress(Bitmap.CompressFormat.JPEG, 100, os);
os.close();
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}).start();
以下是堆栈跟踪:
07-09 14:57:48.595: ERROR/AndroidRuntime(5761): FATAL EXCEPTION: Thread-9
07-09 14:57:48.595: ERROR/AndroidRuntime(5761): java.lang.NullPointerException
07-09 14:57:48.595: ERROR/AndroidRuntime(5761): at com.messageHider.viewImageThumb$1$1.run(viewImageThumb.java:106)
07-09 14:57:48.595: ERROR/AndroidRuntime(5761): at java.lang.Thread.run(Thread.java:1096)
在我尝试压缩位图时引发异常:
//::imagefile.compress(Bitmap.CompressFormat.JPEG,100,操作系统) 如果在
imagefile.compress(Bitmap.CompressFormat.JPEG,100,os)中有NullPointerException
,则imagefile
必须为null
。如果BitmapFactory
无法解码图像,则会发生这种情况
此外:
- 你的文件读取算法效率很低。请考虑每次读取一个以上字节。或者,更好的方法是在
位图工厂上使用
而不是decodeStream()
decodeByteArray()
- 确保您拥有
权限写入外部存储
- 永远不要硬连线路径,尤其是错误的路径,就像你在这里所做的那样。使用
获取外部存储的根目录,然后使用适当的Environment.getExternalStorageDirectory()
构造函数组装一个文件
对象,指向该目录中所需的任何文件文件
- 您不需要确保
目录实际存在Images/