2016-09-12 7 views
0

私はここでFacebook APIを使用して取得するURLを持っており、これを円形のBitmapに変更しようとしています。これは正常に動作しますが、私のイメージは実際には中央にないようです。URLから円形ビットマップに矩形画像を変更すると写真が上に移動しますか?

enter image description here

しかし、私は、私は私のコードで間違ってやっているかを把握することはできません。ここでは、それがどのように見えるかの例です。ここでは、円形のBitmapにURLを変換するために私のコードは次のとおりです。

public Bitmap getBitmapFromURL(String userId) { 
     try { 
      URL imgUrl = new URL("https://graph.facebook.com/" + userId + "/picture?type=large"); 
      InputStream in = (InputStream) imgUrl.getContent(); 
      Bitmap bitmap = BitmapFactory.decodeStream(in); 

      Bitmap output; 

      if (bitmap.getWidth() > bitmap.getHeight()) { 
       output = Bitmap.createBitmap(bitmap.getHeight(), bitmap.getHeight(), Bitmap.Config.ARGB_8888); 
      } else { 
       output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getWidth(), Bitmap.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()); 

      float r = 0; 

      if (bitmap.getWidth() > bitmap.getHeight()) { 
       r = bitmap.getHeight()/2; 
      } else { 
       r = bitmap.getWidth()/2; 
      } 

      paint.setAntiAlias(true); 
      canvas.drawARGB(0, 0, 0, 0); 
      paint.setColor(color); 
      canvas.drawCircle(r, r, r, paint); 
      paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); 
      canvas.drawBitmap(bitmap, rect, rect, paint); 
      return output; 
     } catch (IOException e) { 
      // Log exception 
      return null; 
     } 
    } 

答えて

0

あなたがこの中にミスをした:

canvas.drawBitmap(bitmap, rect, rect, paint); 

あなたはベースイメージの一部を中央にないコピーします。

イメージの中央にソースを移動する必要があります。作業コード:

public Bitmap getBitmapFromURL(String userId) { 
     try { 
      URL imgUrl = new URL("https://graph.facebook.com/" + userId + "/picture?type=large"); 
      InputStream in = (InputStream) imgUrl.getContent(); 
      Bitmap bitmap = BitmapFactory.decodeStream(in); 

      Bitmap output; 


      Rect srcRect; 


      if (bitmap.getWidth() > bitmap.getHeight()) { 
       output = Bitmap.createBitmap(bitmap.getHeight(), bitmap.getHeight(), Bitmap.Config.ARGB_8888); 
       srcRect = new Rect((bitmap.getWidth()-bitmap.getHeight())/2, 0, bitmap.getWidth()+(bitmap.getWidth()-bitmap.getHeight())/2, bitmap.getHeight()); 


      } else { 
       output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getWidth(), Bitmap.Config.ARGB_8888); 
       srcRect = new Rect(0, (bitmap.getHeight()-bitmap.getWidth())/2, bitmap.getWidth(), bitmap.getHeight()+(bitmap.getHeight()-bitmap.getWidth())/2); 

      } 

      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()); 

      float r = 0; 

      if (bitmap.getWidth() > bitmap.getHeight()) { 
       r = bitmap.getHeight()/2; 
      } else { 
       r = bitmap.getWidth()/2; 
      } 

      paint.setAntiAlias(true); 
      canvas.drawARGB(0, 0, 0, 0); 
      paint.setColor(color); 
      canvas.drawCircle(r, r, r, paint); 
      paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); 
      canvas.drawBitmap(bitmap, srcRect, rect, paint); 
      return output; 
     } catch (IOException e) { 
      // Log exception 
      return null; 
     } 
    } 
関連する問題