2012-11-08 61 views
1

我参考this问题链接到this关于如何在图像上创建圆角的文章。角度不是从可绘制的图像上圆角

它适用于我从网上下载的图像,但是当我从Resources/Drawable文件夹读取图像时,图像没有变圆。

当从网络上获得的图像使用:

Bitmap img = BitmapFactory.decodeStream(inputStream); 

而且从资源解码当我使用:

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

当从资源解码返回的位图是不为空。

任何想法,我哪里去错了这一个?

回答

0

我刚才发现问题是由于输入图像是不同的分辨率。

来自资源的图像比网络大得多,因此我需要增加半径以获得舍入效果。

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; 
} 
+0

我已经在使用Java代码 – conor