2013-11-22 8 views
5

Zwei Bilder sind gegeben blasen Ich nenne das erste Bild als Bild und das zweite Bild als Bild. Hier ist mein lineares Layout und ich setze das Bild als Hintergrundbild davon. Jetzt möchte ich das Musterbild in den weißen Bereich meines Bildrahmens füllen. Der äußere Bereich des Rahmenbildes ist transparent und der innere Bereich ist weiß. Wie kann ich ein Musterbild in meinem Bilderrahmen füllen? Ich habe diesen Code getestet.Füllmuster in Bild in Android

aber dies ergibt ein quadratisches Bitmap Image. und mein Imageview ist so, in dem ich Muster füllen möchte.

enter image description here

Musterbild ist wie this-

enter image description here

Ich möchte nur Musterbild in den weißen Bereich dieses Bildes zu füllen. Ich bin in der Lage, die Farbe innerhalb dieses Bildrahmens zu füllen, aber nicht im Falle von Musterbildern. kann mir einer bitte helfen ...

UPDATE: - ich gelesen, dass, wenn wir mehr als eine Farbe festlegen möchten, so sollten wir Shader ich das so

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; 

} 

aktuellen Code aktualisiert verwenden , Hier kann ich den Shader erfolgreich setzen. Nach dieser Methode OnDraw-Methode ruft

@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); 
     } 

Was ist setXfermode ich einige Modi in meiner setPattern Methode versuchte wie: DST_OVER, DST_IN

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

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

aber nicht Ergebnis immer Bedarf nach.

Ist jeder Modus meinen Zweck lösen kann zur Zeit ich diese Ausgabe

enter image description here

Ich glaube, ich bin sehr nah an das Ergebnis bin immer. Ich kann das Muster zeichnen, was auch immer ich brauche, das Remaning-Problem besteht darin, das Muster nur im inneren nicht transparenten Bereich des Rahmens zu setzen.

I auch versucht, diese

if (canvasBitmap.getPixel (x, y) == Color.TRANSPARENT)

transparenten Bereich zu identifizieren, so dass i Muster in einem anderen nicht-transparenten sind füllen kann, aber auch dies nicht Arbeiten.

Hier lade ich das Bild für mehr Klarstellung in das Schlagbild Ich fülle die Farbe in Bild-Bild Jetzt möchte ich Muster anstelle von Rosa Farbe füllen.

enter image description here

Kann jemand einen guten Punkt bitte teilen versuchen müssen ...

Antwort

0

Sie können

Drawing with Pattern Fills von Sue Smith

das obige Tutorial Mit Blick auf das folgende Tutorial haben für Ihre Hilfe können Sie enter image description here

folgende Ausgabe