1

画像の角を丸くする方法に関するこの記事にリンクしているこの質問を参照してください。

Web からダウンロードしている画像では問題なく動作しますが、Resources/Drawable フォルダーから画像を読み取ると、画像が丸くなりません。

私が使用するウェブから画像を取得するとき:

Bitmap img = BitmapFactory.decodeStream(inputStream);

そして、私が使用するリソースからデコードするとき:

Bitmap img = BitmapFactory.decodeResource(ctx.getResources(), R.drawable.profile_photo);

リソースからデコードする場合、返されるビットマップは null ではありません。

これでどこが間違っているのかについてのアイデアはありますか?

4

2 に答える 2

0

問題は、入力画像の解像度が異なることが原因であることがわかりました。

リソースからの画像は Web よりもはるかに大きかったため、丸め効果を得るには半径のサイズを大きくする必要がありました。

于 2012-11-08T12:26:13.257 に答える
0

「シェイプ」(ドローアブル内の XML) を追加します。

<shape xmlns:android="http://schemas.android.com/apk/res/android"> 
<solid android:color="#ffffffff"/>    

<stroke android:width="3dp"
        android:color="#ff000000"
        />

<padding android:left="1dp"
         android:top="1dp"
         android:right="1dp"
         android:bottom="1dp"
         /> 

<corners android:bottomRightRadius="7dp" android:bottomLeftRadius="7dp" 
 android:topLeftRadius="7dp" android:topRightRadius="7dp"/> 

&あなたのドローアブルでこの形状を使用してください。またはこのコードを使用してください

public static Bitmap getRoundedCornerBitmap(Bitmap bitmap) {
Bitmap output = Bitmap.createBitmap(bitmap.getWidth(),
     bitmap.getHeight(), Config.ARGB_8888);
Canvas canvas = new Canvas(output);

final int color = 0xff424242;
final Paint paint = new Paint();
final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
final RectF rectF = new RectF(rect);
final float roundPx = 12;

paint.setAntiAlias(true);
canvas.drawARGB(0, 0, 0, 0);
paint.setColor(color);

canvas.drawRoundRect(rectF, roundPx, roundPx, paint);

paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
canvas.drawBitmap(bitmap, rect, rect, paint);

return output;
}
于 2012-11-08T11:32:05.220 に答える