Android modifica i canali bitmap

È ansible accedere al canale alfa di una data bitmap con extractAlpha() , ma non sono stato in grado di trovare alcun modo per effettivamente impostare il canale alfa di una bitmap.

Come si possono ricomporre più immagini in scala di grigi come canali in un Bitmap con Android?

  • Motivo per NullPointerException se setContentView () non viene utilizzato
  • misuratore acustico android
  • iptables di errore getprotobyname
  • Come rimuovere una preferenza da PreferenceActivity?
  • comunicazione tra due dispositivi utilizzando sms
  • Esegui un'applicazione personalizzata solo in Android, impedisce l'esecuzione di qualsiasi altra cosa
  • Attività con barra d'azione ma senza titolo?
  • Firebase per Android - W / PersistentConnection: pc_0 - Le credenziali di authentication fornite non sono valide
  • Support diversi formati video per Android
  • Come get gli album di foto utente di Facebook utilizzando il grafico api?
  • Perché AndroidTestCase.getContext () getApplicationContext () restituisce null?
  • Come faccio a creare una funzionalità simile a JQuery Slider per l'applicazione iPhone / Android?
  • 3 Solutions collect form web for “Android modifica i canali bitmap”

    È abbastanza ansible ricolbind i canali separati in un'image ARGB. Hai bisogno solo delle immagini dei canali in scala di grigi e di un'image con il canale alfa che vuoi – notate che questa non è un'image opaca in scala di grigi, ma un'image con l' alfa che si desidera. Quindi, disegnate ciascun canale con una Paint usando il appropriato PorterDuffXfermode su un bitmap vuoto, nero, riempito.

     // have your 3 channel grayscales and 1 alpha bitmap loaded by this point Paint redPaint = new Paint(); redPaint.setXfermode(new PorterDuffXfermode(Mode.LIGHTEN)); redPaint.setShader(new BitmapShader(redChanImg, TileMode.CLAMP, TileMode.CLAMP)); redPaint.setColorFilter(new PorterDuffColorFilter(Color.RED, Mode.DARKEN)); Paint greenPaint = new Paint(); greenPaint.setXfermode(new PorterDuffXfermode(Mode.LIGHTEN)); greenPaint.setShader(new BitmapShader(greenChanImg, TileMode.CLAMP, TileMode.CLAMP)); greenPaint.setColorFilter(new PorterDuffColorFilter(Color.GREEN, Mode.DARKEN)); Paint bluePaint = new Paint(); bluePaint.setXfermode(new PorterDuffXfermode(Mode.LIGHTEN)); bluePaint.setShader(new BitmapShader(blueChanImg, TileMode.CLAMP, TileMode.CLAMP)); bluePaint.setColorFilter(new PorterDuffColorFilter(Color.BLUE, Mode.DARKEN)); Paint alphaPaint = new Paint(Paint.ANTI_ALIAS_FLAG); alphaPaint.setXfermode(new PorterDuffXfermode(Mode.DST_IN)); c.setBitmap(resultImage); c.drawRect(0, 0, width, height, redPaint); c.drawRect(0, 0, width, height, greenPaint); c.drawRect(0, 0, width, height, bluePaint); c.drawBitmap(alphaImg, 0, 0, alphaPaint); //save off resultImage, display it, etc... 

    Con il codice precedente e le seguenti 4 immagini (rispettivamente rosso, verde, blu e alfa): alt textalt textalt textalt text

    Otteniamo il seguente risultato:


    alt text


    Solo una nota veloce: l'ovale rosso è un opaco, ovale rosso su uno background trasparente – il colore non ha importnza per questo, ma l'alfa fa

    Manipolare bitmap è una cosa semplicemente semplice quando si accede direttamente al pixel (byte). Per farlo in Android è ansible farlo su questo approch

     ByteArrayOutputStream bos = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.PNG, 100, bos); byte[] b = bos.toByteArray(); 

    Ora puoi fare qualsiasi manipolazione, trasformazione o combinazione di immagini che ti piace.

    Spero che questo sia ciò che stavi cercando.

    Hai provato con la canvas? Il seguente sembra un hack, ma forse functionrà. Non l'ho provata.

      Bitmap bitmap; int color = bitmap.getPixel(1, 123); Rect rect = new Rect(1,123,2,124); Canvas c = new Canvas(bitmap); c.clipRect(rect); c.drawARGB(50, Color.red(color), Color.green(color), Color.blue(color)); 

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.