2014-04-15 2 views
0

캔버스를 사용하여 다른 이미지 내부에 이미지를 그리는 방법; 다음과 같이 그림을 보면 : enter image description here안드로이드는 다른 이미지 안에 이미지를 그립니다.

marker = gmap.addMarker(new MarkerOptions().title("test") 
         .position(new LatLng(0, 0)) 
         .snippet("snipet test") 
         .icon(BitmapDescriptorFactory.fromBitmap(bitmap)) 

같은지도 앱 V2에 넣어하는 방법에 이미이

  InputStream inputStream = connection.getInputStream(); 
      Bitmap bitmap = BitmapFactory.decodeStream(inputStream);//Convert to bitmap 
      Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), 
        bitmap.getHeight(), 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()); 
      final RectF rectF = new RectF(rect); 


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

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

같은 사각형에 그림을 그려 do 제발 도와주세요

답변

0

나는이 문제에 대한 해결책을 발견 : 당신이에 이미지를 넣어 정확한 크기로 결과의 크기를 조정 한 다음 캔버스 이미지와 함께 캔버스로 원을 그립니다.

public class IconMarker { 
public IconMarker(){} 

public Bitmap DrawMarker(String userid,int typeid,Resources rcs){ 

    // image from database: ...InputStream inputStream = connection.getInputStream(); 
    //Bitmap bitmap = BitmapFactory.decodeStream(inputStream); 
    Bitmap img1=new UserInfoBd().getPhotoProfil(userid); 
    if(img1==null) img1=BitmapFactory.decodeResource(rcs,R.drawable.espace_photo); 
    Bitmap.Config conf = Bitmap.Config.ARGB_8888; 
    Bitmap bmp = BitmapFactory.decodeResource(rcs, 
      typeid); 
    Bitmap output = Bitmap.createBitmap(bmp.getWidth(), 
      bmp.getHeight(), Bitmap.Config.ARGB_8888); 

    Canvas canvas1 = new Canvas(output); 
    canvas1.drawBitmap(bmp, 0,0, null); 
    Bitmap output1 = Bitmap.createBitmap(img1.getWidth(), 
      img1.getHeight(), Bitmap.Config.ARGB_8888); 
    Canvas canvas = new Canvas(output1); 

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


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

    paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); 
    canvas.drawBitmap(img1, rect, rect, paint); 
    Bitmap img=getResizedBitmap(output1,bmp.getHeight()*3/4-4,bmp.getWidth()*3/4); 

    canvas1.drawBitmap(img,(float)4.7,(float)3.5,null); 

    return output; 

} 
public Bitmap getResizedBitmap(Bitmap bm, int newHeight, int newWidth) { 

    int width = bm.getWidth(); 

    int height = bm.getHeight(); 

    float scaleWidth = ((float) newWidth)/width; 

    float scaleHeight = ((float) newHeight)/height; 

// 조작

Matrix matrix = new Matrix(); 

에 대한 행렬을 작성 // 비트 맵

matrix.postScale(scaleWidth, scaleHeight); 

// 새로운 비트 맵

Bitmap resizedBitmap = Bitmap.createBitmap(bm, 0, 0, width, height, matrix, false); 

    return resizedBitmap; 

} 

}

에게 다시 크기 조정
0

원하는 프레임의 모양으로 캔버스의 클리핑 패스를 설정하십시오 :

Path frame = new Path(); 
frame.addCircle(centerX, centerY, radius, Direction.CW); 
canvas.getClipBounds(oldClipBounds); //see below 
canvas.clipPath(frame); 

이후 캔버스에 그릴 내용은 원 밖에있을 경우 표시되지 않습니다. 당신은이 프레임 밖에서 이루어져야 추가 도면을, 필요하면

, 당신이 나중에에 그것을 보호 할 수 있습니다 :

canvas.clipRect(oldClipBounds, Region.Op.REVERSE_DIFFERENCE); 
관련 문제