更新:似乎这个问题归结为一些图像被正确解码,而有些则没有。如果我将非工作JPEG
转换为png
,则可以正常工作。我的所有图片都不能直接从JPEG
,Nikon D5000
或Panasonic Lumix
手机中Sony Experia
获取。
我正在使用Picasso
填充ListView
应用中的Android
。但是,对于我要使用的图像,我遇到了错误--- decoder->decode returned false
,但它适用于我在网络上运行的其他图片。因此,我认为它与图像有关,但我不太确定。 Skia
使用的Picasso
库中出现错误(据我所知)。
例如,this图片工作正常,而this没有,而后者我需要工作。我需要使用的所有其他图片都是使用相同的相机拍摄的,并由Gimp
以相同的方式进行编辑,从而产生类似第一张的图像,但它们都不起作用。因此,我怀疑它与图像本身而不是解码器有关。
出现了一些问题:
Picasso
或Skia
启用更多调试和输出?例如,堆栈跟踪?我尝试了什么:
Inkscape
中打开一张非工作图片,然后将其导出为png
文件。现在,图像确实有效,所以似乎有JPEG
编码。Gimp
中打开图片并再次导出到JPEG
,但这没有帮助。Shotwell
中打开图片并重新导出到JPEG
,无论是否有元数据,但这些图片都不起作用。导出到png
与从png
导出到Inkscape
一样。Nikon D5000
相机拍摄,因此我尝试使用Sony Experia
手机和Panasonic Lumix
相机拍摄一些图像。 JPEG
不是直接工作,但如果转换为PNG
,则全部解码。Picasso.Builder
对象,如图here所示,以获得堆栈跟踪。我已粘贴下面的堆栈跟踪。看起来它实际上是Android.BitmapFactory.decodeStream()
失败,因为堆栈跟踪指向com.squareup.picasso.BitmapHunter.decodeStream()
,它使用Android.BitmapFactory.decodeStream()
。因此,错误可能与Skia
无关。Imagemagick
的{{1}}并比较了输出。我无法找到任何突出的差异,所以它没有给我带来任何进一步的发展。示例Logcat输出:
identify -verbose
来自D/Picasso(528): Main created [R0] Request{http://www.miasmat.no/wp-content/uploads/2015/05/OvnsbaktKveite9.jpg}
D/Picasso(528): Dispatcher enqueued [R0]+7ms
D/Picasso(528): Main created [R1] Request{http://www.miasmat.no/wp-content/uploads/2015/05/OvnsbaktKveite9.jpg}
D/Picasso(528): Hunter joined [R1]+1ms to [R0]+10ms, [R1]+1ms
D/Picasso(528): Main created [R2] Request{http://www.miasmat.no/wp-content/uploads/2015/05/OvnsbaktKveite9.jpg}
D/Picasso(528): Hunter joined [R2]+1ms to [R0]+14ms, [R1]+5ms, [R2]+2ms
D/Picasso(528): Hunter executing [R0]+21ms, [R1]+12ms, [R2]+9ms
D/skia(528): --- decoder->decode returned false
D/Picasso(528): Dispatcher retrying [R0]+1456ms, [R1]+1447ms, [R2]+1444ms
D/Picasso(528): Hunter executing [R0]+1458ms, [R1]+1448ms, [R2]+1445ms
D/skia(528): --- decoder->decode returned false
D/Picasso(528): Dispatcher retrying [R0]+2867ms, [R1]+2857ms, [R2]+2854ms
D/Picasso(528): Hunter executing [R0]+2868ms, [R1]+2859ms, [R2]+2855ms
D/skia(528): --- decoder->decode returned false
D/Picasso(528): Dispatcher batched [R0]+3406ms, [R1]+3397ms, [R2]+3394ms for error
D/dalvikvm(249): GC_EXPLICIT freed 119 objects / 5288 bytes in 28ms
I/TAGZ(528): Error! url = http://www.miasmat.no/wp-content/uploads/2015/05/OvnsbaktKveite9.jpg
D/Picasso(528): Main errored [R0]+3607ms
I/TAGZ(528): Error! url = http://www.miasmat.no/wp-content/uploads/2015/05/OvnsbaktKveite9.jpg
D/Picasso(528): Main errored [R1]+3598ms
I/TAGZ(528): Error! url = http://www.miasmat.no/wp-content/uploads/2015/05/OvnsbaktKveite9.jpg
D/Picasso(528): Main errored [R2]+3596ms
D/Picasso(528): Dispatcher delivered [R0]+3610ms, [R1]+3601ms, [R2]+3598ms
的堆栈跟踪,指向this文件。
Picasso
W/System.err(1467): java.io.IOException: Failed to decode stream.
W/System.err(1467): at com.squareup.picasso.BitmapHunter.decodeStream(BitmapHunter.java:145)
W/System.err(1467): at com.squareup.picasso.BitmapHunter.hunt(BitmapHunter.java:217)
W/System.err(1467): at com.squareup.picasso.BitmapHunter.run(BitmapHunter.java:159)
W/System.err(1467): at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
W/System.err(1467): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
W/System.err(1467): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
W/System.err(1467): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068)
W/System.err(1467): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561)
W/System.err(1467): at java.lang.Thread.run(Thread.java:1096)
W/System.err(1467): at com.squareup.picasso.Utils$PicassoThread.run(Utils.java:411)
getView
中的 BaseAdapter
方法:
ListView
答案 0 :(得分:0)
该错误的原因是:您正在尝试设置大小超过图像视图布局大小的图像。
我找到了一个简单的解决方案!如果您使用毕加索库进行图像加载,那么请调整图像大小以调整图像视图布局。
即我这样做了:
Picasso.with(ImageLoaderActivity.this)
.load("https://static.pexels.com/photos/34578/pexels-photo.jpg")
.resize(200,250)
.into(img);