2013-11-22 4 views
5

두 이미지는 첫 번째 이미지를 프레임 이미지로, 두 번째 이미지를 프레임 이미지로 호출합니다. 여기 fst는 내 선형 레이아웃이며 프레임 이미지를 배경 이미지로 설정합니다. 이제 프레임 이미지의 흰색 영역에 패턴 이미지를 채우고 싶습니다. 프레임 이미지의 바깥 쪽 영역은 투명하고 내부 영역은 흰색입니다. 내 프레임 이미지에 패턴 이미지를 채우려면 어떻게해야합니까? 나는이 코드를 tryied했다.안드로이드에서 이미지의 채우기 패턴

private void patternFill(Bitmap tempBitmapColor) { 
    Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.pattern_a); 
     BitmapDrawable bitmapDrawable = new BitmapDrawable(bmp); 
     bitmapDrawable.setTileModeXY(Shader.TileMode.REPEAT, Shader.TileMode.REPEAT); 
     fst.setBackgroundDrawable(bitmapDrawable); 


} 

그러나 이것은 정사각형 비트 맵 이미지를 제공합니다. 내 이미지 뷰는 이와 같이 패턴을 채우기를 원합니다.

enter image description here

패턴 이미지는 나는 단지이 이미지의 흰색 영역에서 패턴 이미지를 채우려는 this-

enter image description here

같다. 이 이미지 프레임 안의 색상은 채울 수 있지만 패턴 이미지의 경우에는 완료되지 않습니다. 하나는 제발 도움이 될 수 있습니다 ...

업데이트 : - 나는 우리가 우리가 쉐이더를 사용한다 두 개 이상의 색상을 설정하려면 내가 현재 코드

그래서
public void setPattern(String newPattern){ 
      postInvalidate(); 
      //get pattern 
      int patternID = getResources().getIdentifier(newPattern, "drawable", "com.akanksha.partternfillexperiment"); 
      //decode 
      Bitmap patternBMP = BitmapFactory.decodeResource(getResources(), patternID); 
      //create shader 
      BitmapShader patternBMPshader = new BitmapShader(patternBMP, 
        Shader.TileMode.REPEAT, Shader.TileMode.REPEAT); 
      //color and shader 
//   drawPaint.setColor(0xFFFFFFFF); 
      drawPaint.setShader(patternBMPshader); 
      patternset=true; 

} 

업데이트 읽어 보시기 바랍니다 , 여기서는 셰이더를 성공적으로 설정할 수 있습니다. , DST_OVER

drawPaint.setColorFilter(new PorterDuffColorFilter(Color.YELLOW,Mode.MULTIPLY)); 

     drawPaint.setXfermode(new PorterDuffXfermode(Mode.DST_OVER)); 

DST_IN

을하지만, 필요에 따라 결과를 얻지 못하고 : 이 방법 이후의 OnDraw 방법은 내은 setPattern 방법 같은 일부 모드를 시도

@Override 
    protected void onDraw(Canvas canvas) { 

     if(patternset){ 

     for (int x = 0; x < canvasBitmap.getWidth(); x++) { 
      drawPath.moveTo(x, 0); 
      for (int y = 0; y < canvasBitmap.getHeight(); y++) { 
drawPath.lineTo(x, y); 

      } 

      drawCanvas.drawPath(drawPath, drawPaint); 
      drawPath.reset(); 
      invalidate(); 
      canvas.drawBitmap(canvasBitmap, 0, 0, canvasPaint); 
      canvas.drawPath(drawPath, drawPaint); 
     } 

setXfermode 무엇입니까 호출합니다.

어떤 모드가 현재 내가이 출력

enter image description here

나는 결과에 매우 근접라고 생각을 얻고 내 목적을 해결할 수입니다. 이제까지 필요로했던 패턴을 그릴 수 있습니다. 잔상 문제는 프레임의 내부 비 투명 영역에서만 패턴을 설정하는 것입니다.

가 나는 또한 다른 불투명의 패턴을 기입 할 수 있도록

투명 영역을 식별하기 위해 (canvasBitmap.getPixel (X, Y) == Color.TRANSPARENT)의 경우이

을 시도하지만,이 또한하지 일.

여기에 더 많은 설명을 위해 이미지를 업로드하고 있습니다. 블로우 이미지에서 프레임 이미지의 색상을 채 웁니다. 이제 핑크색 대신 패턴을 채우고 싶습니다.

enter image description here

는 사람이 공유하시기 바랍니다 시도하는 어떤 좋은 점을 가질 수 ...

답변

0

당신은 당신이 출력을 enter image description here

에 따라 얻을 수있는 위의 튜토리얼을 사용하여 수 스미스

하여 도움

Drawing with Pattern Fills에 대해 다음 튜토리얼에 모습을 가질 수

관련 문제