2016-05-21 11 views
0

私は画像をトリミングするために、このコードを使用しています:作物ビットマップ問題

Bitmap raw = ((BitmapDrawable)hWlp).getBitmap(); 
DisplayMetrics metrics = new DisplayMetrics(); 
WindowManager windowManager = (WindowManager) 
    context.getSystemService(Context.WINDOW_SERVICE); 
windowManager.getDefaultDisplay().getMetrics(metrics); 
int width = metrics.widthPixels; 
int height = metrics.heightPixels; 
wallpaper = Bitmap.createBitmap(raw, width/2, 0, width, height); 

私の元画像()は800x960で、対象画像が800×480(画面サイズ)です。だから、私はこのエラーが出る理由を理解していない:がある)(私の場合X +幅(2分の480 + 480)に

java.lang.IllegalArgumentException: x + width must be <= bitmap.width() 

場合を720とbitmap.widthをされた960

答えて

0
あなたはそのように使用することができ

public static Bitmap cropAndScale (Bitmap source,int scale){ 
    int factor = source.getHeight() <= source.getWidth() ? source.getHeight(): source.getWidth(); 
    int longer = source.getHeight() >= source.getWidth() ? source.getHeight(): source.getWidth(); 
    int x = source.getHeight() >= source.getWidth() ?0:(longer-factor)/2; 
    int y = source.getHeight() <= source.getWidth() ?0:(longer-factor)/2; 
    source = Bitmap.createBitmap(source, x, y, factor, factor); 
    source = Bitmap.createScaledBitmap(source, scale, scale, false); 
    return source; 
} 

これは一例であり、あなたがトンを得ることができますdisplaymetrics

+1

画像のアスペクト比は変更されますが、画像は切り取られません。 –

+0

はい私は私の答えを変更しました –

0

で変数を変更することができます彼のエラーのみ、あなたのアプリが横向きの場合;) 私はこの場合、metrics.widthPixelsは480pxの代わりに800pxを返すと考えています。

+0

画面内に収まるように画面サイズよりも大きな画像をトリミングします。だから私はオリエンテーションがある役割を果たすとは思わない。私は正しい? – Hahaido

+0

ビットマップは、どちらの向きでもこの画面サイズの問題を避けるために、少なくとも1200ピクセル(800/2 + 800)の幅を持つ必要があります。さまざまな画面サイズと画像をサポートしなければならないと想像してください。したがって、一般的な解決策が必要ですが、要件によって異なります。) –

関連する問題