

Androidの画像処理ライブラリPicassoを使って、以下の画像処理した時以下のTransformationを実装したクラスでreturnされず(recycleまではされている)に何度も、このメソッドがループ?して最終的に画像サイズや切り取り位置の値が以下のようになりクラッシュします。もと画像にサイズは640×480です。他の画像ではできているのでなんでそうなるのかさっぱりわかりません。原因がわかれば教えていただければ幸いです。よろしくおねがいします。

画像URL  
<https://i.ytimg.com/vi/RFinNxS5KN4/sddefault.jpg>

Picassoの利用箇所

[code]

    Picasso.with(mContext)
                        .load(APIUtil.checkThumbnail(item))
                        .transform(new ViewUtils.TopThumbnailEditor())
                        .placeholder(R.drawable.top_thumbnail_placeholder)
                        .fit()
                        .into(holder.thumbnail);
    
[/code]

Transformation実装クラス

[code]

    private static final float THUMBNAIL_HEIGHT_DIVINER = 9f/16f;
    private static final float TOP_HEIGHT_DIVINER = 16f/43f;
    
    public static class TopThumbnailEditor implements Transformation{
    
            @Override
            public Bitmap transform(Bitmap source) {
                float width = source.getWidth();
                float height = source.getHeight();
    
                float newHeight = width * THUMBNAIL_HEIGHT_DIVINER;
                float heightCutSize = (height - newHeight)/2;
                newHeight = width * TOP_HEIGHT_DIVINER;
                float moreHeightCutSize = newHeight/2;
    
                Bitmap result = Bitmap.createBitmap(source, 0, (int)(heightCutSize+moreHeightCutSize), (int)width, (int)newHeight);
                if(result!=source)
                    source.recycle();
                return result;
            }
    
            @Override
            public String key() {
                return "TopThumbnailEditor";
            }
        }
    
[/code]

最終的な画像のサイズ、切り取り位置など

[code]

    width: 1020.0
    height: 379.0
    X座標の切り取り位置: -97.375
    Y座標の切り取り位置: 189.76744
    
[/code]


CC BY-SA 3.0
2015-06-26T13:38:19.473
11782
2015-07-30T01:57:21.643
2015-06-26T14:22:26.567
7232
7232
question
android
Picassoで特定の画像を処理した時に、returnされない。


うまく動く他の画像というのはワイド画像ではないですか？

[code]

    private static final float THUMBNAIL_HEIGHT_DIVINER = 9f/16f;
    
[/code]

で入って来る画像は16:9だと決め込んでいるのに4:3を渡すから負の座標が作られて、後段がエラーになってループするのだと思いますが。


CC BY-SA 3.0
2015-06-30T01:18:57.703
11864
2015-06-30T01:18:57.703
8136
11782
answer