2016-06-16 4 views
0

Ich wollte wissen, ob es möglich ist, ein Bild in eine andere Form zu schneiden, nicht nur als Quadrat, Rechteck oder Kreis. Grundsätzlich, was ich suche ist, dass der Benutzer eine Vorlage einer PNG-Datei auswählen kann (bereits vorhanden) und schneidet das Bild in dieser Form.Wie ein Bild in eine beliebige Form über eine Vorlage in Android Corp?

+0

Fragen Suchhilfe muss * das gewünschte Verhalten *, * ein spezifisches Problem oder einen Fehler * und * den kürzesten erforderlichen Code * enthalten, um es ** in der Frage selbst zu reproduzieren **. Fragen ohne ** eine klare Problemstellung ** sind für andere Leser nicht nützlich. Siehe: [Erstellen eines minimalen, vollständigen und überprüfbaren Beispiels] (http://stackoverflow.com/help/mcve). –

+0

Nun, es ist definitiv möglich ... schauen Sie sich nur Whatsapp Profilbilder an – instanceof

Antwort

0

Schauen Sie sich diesen Code:

public class MainActivity extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    final ImageView imageViewPreview = (ImageView) findViewById(R.id.imageview_preview); 
    new Thread(new Runnable() { 
     @Override 
     public void run() { 
      final Bitmap source = BitmapFactory.decodeResource(MainActivity.this.getResources(), 
        R.drawable.source); 
      final Bitmap mask = BitmapFactory.decodeResource(MainActivity.this.getResources(), 
        R.drawable.mask); 
      final Bitmap croppedBitmap = cropBitmap(source, mask); 
      runOnUiThread(new Runnable() { 
       @Override 
       public void run() { 
        imageViewPreview.setImageBitmap(croppedBitmap); 
       } 
      }); 
     } 
    }).start(); 
} 

private Bitmap cropBitmap(final Bitmap source, final Bitmap mask){ 
    final Bitmap croppedBitmap = Bitmap.createBitmap(
      source.getWidth(), source.getHeight(), 
      Bitmap.Config.ARGB_8888); 
    final Canvas canvas = new Canvas(croppedBitmap); 
    canvas.drawBitmap(source, 0, 0, null); 
    final Paint maskPaint = new Paint(); 
    maskPaint.setXfermode(
      new PorterDuffXfermode(PorterDuff.Mode.DST_OUT)); 
    canvas.drawBitmap(mask, 0, 0, maskPaint); 
    return croppedBitmap; 
} 

}

Die Hauptfunktion ist die "cropBitmap" -Funktion. Im Grunde genommen erhält es zwei Bitmaps, eine Quelle und eine Maske, und dann "schneidet" es die Quell-Bitmap unter Verwendung der Maskenform ab. Dies ist meine Quelle Bitmap: Source bitmap Dies ist der Maske Bitmap: Mask bitmap Und das ist das Ergebnis: Result

Auch diese große Präsentation Check-out, könnte dies auch Ihnen helfen: Fun with Android shaders and filters