Affinamento dell'image di Android, saturazione, tonalità, luminosità e contrasto

Sto provando a creare un'applicazione che mi permetterà di regolare la tonalità, la saturazione, la luminosità, il contrasto e la nitidezza di un'image regolando le barre di ricerca per ciascuno dei campi di cui sopra. come a http://ronbigelow.com/articles/workflow_basic/hue-saturation_tool.jpg

Non ho idea di come farlo e non posso trovare alcun tutorial online. Android ha qualcosa che fa già questo? Devo manipolare i colors di singoli pixel? Se devo confondere con i pixel, come faccio a farlo?

  • Come evitare l'emulatore appendente Android getSystemService (Context.SENSOR_SERVICE)?
  • Visualizza AlertDialog come window di sovrapposizione di sistema da Service
  • Scorrimento automatico quando non si scorre in un elenco
  • L'emulatore Android non si avvia
  • React Native build android ha fallito. Posizione SDK non trovata
  • adjustPan non impedisce alla tastiera di coprire EditText
  • Sostituire un frammento con un altro in ViewPager
  • Come accedere a facebook utilizzando sdk 4.1.0 in android?
  • Firebase device per messaggistica dispositivo utilizzando Retrofit, come ottengo l'ID del messaggio?
  • Guida USB su Android - nuovi dispositivi
  • Convertire SQLite in JSON
  • Phonegap - Android Come regolare il layout in modalità schermo integer quando il softkeyboard è visibile
  • One Solution collect form web for “Affinamento dell'image di Android, saturazione, tonalità, luminosità e contrasto”

    Sì, android ha alcuni strumenti per manipolare i colors, alcuni più semplici di altri. L'unico modo per fare quello che stai specificamente chiedendo lo spazio generale di tutte le immagini è quello di modificare singoli pixel. Ci sono altri trucchi veloci e sporchi che sono molto più veloci, ma molto less precisi (ColorFilter).

    Chiave di tonalità:

    private Bitmap adjustedHue(Bitmap o, int deg) { Bitmap srca = o; Bitmap bitmap = srca.copy(Bitmap.Config.ARGB_8888, true); for(int x = 0;x < bitmap.getWidth();x++) for(int y = 0;y < bitmap.getHeight();y++){ int newPixel = hueChange(bitmap.getPixel(x,y),deg); bitmap.setPixel(x, y, newPixel); } return bitmap; } private int hueChange(int startpixel,int deg){ float[] hsv = new float[3]; //arrays to store HSV values Color.colorToHSV(startpixel,hsv); //get original HSV values of pixel hsv[0]=hsv[0]+deg; //add the shift to the HUE of HSV arrays hsv[0]=hsv[0]%360; //borders hue to values:[0,360] return Color.HSVToColor(Color.alpha(startpixel),hsv); } 

    Da qui, la saturazione / luminosità sono banali. Ma, mentre tutto questo otterrà quello che vuoi, è un po 'lento. La function getPixel () è particolarmente intensa. Consiglierei di "memorizzare" i pixel in primo luogo, se hai intenzione di modificare queste cose in tempo reale. Ad esempio, memorizzare tutti i valori di HUE, SATURATION, VALUE e ALPHA in primo luogo come arrays 2d e chiamarli THEM anziché ricall getPixel () e Color.colorToHSV () con each modifica minore accelererà notevolmente il codice.

    Inoltre, la function bitmap.getPixels () ha funzionato molto meglio per me. È ansible memorizzare la matrix che produce prima, quindi iterare sopra.

    Ora, mentre la luminosità / contrasto può essere fatta utilizzando methods simili a pixel (moltiplicare V per qualche valore e aggiungere un certo offset) … la nitidezza non è così semplice. La nitidezza non è una modifica isolata a colors, è una modifica dell'image stessa (chiamata "convoluzione"). Cioè, la trasformazione deve sapere qualcosa sui pixel vicini al fine di lavorare. Non sono a conoscenza di una function Android integrata per questo. Ma può essere fatto in diversi modi.

    Se vuoi una function "affilare", provo prima una function "sfocatura". È un process simile, ma è più intuitivo (e più fresco). E si può effettivamente affinare un'image usando la sfocatura. Questo ragazzo ha un ottimo lavoro a spiegare tutto questo per l'uso in java (con sorgente / applet):

    http://www.jhlabs.com/ip/blurring.html

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