gpt4 book ai didi

java - BitmapFactory.decodeFile 返回 null

转载 作者:行者123 更新时间:2023-12-01 15:48:51 27 4
gpt4 key购买 nike

我想从网络上的照片创建位图。首先,我尝试使用 BitmapFactory.decodeStream 但由于错误而返回 null (http://code.google.com/p/android/issues/detail?id=6066)。现在我正在保存图像,然后使用 BitmapFactory.decodeFile ,但它仍然返回 null。

有什么问题或其他解决方法的想法吗?

谢谢!

    try {
URL uri = new URL("http://www.witzigundkraus.de/wp-content/uploads/2008/04/scooter-dj-munchen.jpg");
URLConnection connection = uri.openConnection();
Log.i(TAG, "connecting...");
connection.connect();
InputStream is = connection.getInputStream();
//BufferedInputStream bis = new BufferedInputStream(is, 8 * 1024);

File myfile = new File(getApplicationContext().getCacheDir(), "wallpaper.tmp");
myfile.createNewFile();
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(myfile));

byte buf[]=new byte[1024];
int len;
while((len=is.read(buf))>0)
out.write(buf,0,len);
out.close();
is.close();


Log.d(TAG, String.valueOf(myfile.exists()));
Bitmap bmp = BitmapFactory.decodeFile(myfile.getName());
//Bitmap bmp = BitmapFactory.decodeStream(bis);


Log.i(TAG, "setting bitmap");

Matrix matrix = new Matrix();
int scale = canvas.getWidth()/bmp.getWidth();
matrix.postScale(scale, scale, bmp.getWidth(), bmp.getHeight());
//matrix.postScale(0.5F, canvas.getWidth()/bmp.getWidth());

Bitmap bmp2 = Bitmap.createScaledBitmap(bmp, canvas.getWidth(), canvas.getHeight(), true);

Paint p = new Paint();
p.setFilterBitmap(true);


try{
canvas.drawBitmap(bmp2, matrix, p);
}catch(NullPointerException exc){
//why do we get this??
Log.d(TAG, "NullPointerException drawing canvas. why?");
return;
}


} catch (MalformedURLException exc){
Log.e(TAG, exc.toString());
return;
} catch (IOException exc){
Log.e(TAG, exc.toString());
return;
}










6-30 17:16:14.558 2253 2253 E AndroidRuntime: java.lang.NullPointerException
06-30 17:16:14.558 2253 2253 E AndroidRuntime: at com.localfotos.MyWallpaperService$CubeEngine.drawCube(MyWallpaperService.java:212)
06-30 17:16:14.558 2253 2253 E AndroidRuntime: at com.localfotos.MyWallpaperService$CubeEngine.drawFrame(MyWallpaperService.java:159)
06-30 17:16:14.558 2253 2253 E AndroidRuntime: at com.localfotos.MyWallpaperService$CubeEngine.onSurfaceChanged(MyWallpaperService.java:109)
06-30 17:16:14.558 2253 2253 E AndroidRuntime: at android.service.wallpaper.WallpaperService$Engine.updateSurface(WallpaperService.java:543)
06-30 17:16:14.558 2253 2253 E AndroidRuntime: at android.service.wallpaper.WallpaperService$Engine.attach(WallpaperService.java:591)
06-30 17:16:14.558 2253 2253 E AndroidRuntime: at android.service.wallpaper.WallpaperService$IWallpaperEngineWrapper.executeMessage(WallpaperService.java:787)
06-30 17:16:14.558 2253 2253 E AndroidRuntime: at com.android.internal.os.HandlerCaller$MyHandler.handleMessage(HandlerCaller.java:45)
06-30 17:16:14.558 2253 2253 E AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:99)
06-30 17:16:14.558 2253 2253 E AndroidRuntime: at android.os.Looper.loop(Looper.java:136)
06-30 17:16:14.558 2253 2253 E AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:4425)
06-30 17:16:14.558 2253 2253 E AndroidRuntime: at java.lang.reflect.Method.invokeNative(Native Method)
06-30 17:16:14.558 2253 2253 E AndroidRuntime: at java.lang.reflect.Method.invoke(Method.java:521)
06-30 17:16:14.558 2253 2253 E AndroidRuntime: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
06-30 17:16:14.558 2253 2253 E AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
06-30 17:16:14.558 2253 2253 E AndroidRuntime: at dalvik.system.NativeStart.main(Native Method)

最佳答案

伙计,我还在我的应用程序中从互联网下载图像,它运行得很好。我用来下载的函数是:

public Bitmap download_Image(String url) {
Bitmap bm = null;
try {
URL aURL = new URL(url);
URLConnection conn = aURL.openConnection();
conn.connect();
InputStream is = conn.getInputStream();
BufferedInputStream bis = new BufferedInputStream(is);
bm = BitmapFactory.decodeStream(bis);
bis.close();
is.close();
} catch (IOException e) {
Log.e("Hub","Error getting the image from server : " + e.getMessage().toString());
}
return bm;
}

我设置了另一个线程来下载图像,以便 UI 线程继续可用。我使用了 AsyncTask (请参阅 here ),以便(简化的)doInBackground 函数类似于:

@Override
protected Void doInBackground(String... urls) {
return download_Image(urls[0]);
}

我认为this page在 android 的博客中很好地解释了与此问题相关的内容。

关于java - BitmapFactory.decodeFile 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6537105/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com