Gibt es eine Möglichkeit, eine Bitmap in Sepia zu konvertieren? Ich weiß, in GrayScale zu konvertieren, ist setSaturation in ColorMatrix. Aber was ist mit Sepia?Konvertieren von Bitmap zu Sepia in Android
Antwort
weiß, dass ich die Antwort, aber vielleicht, wenn einige haben andere bessere Lösung ..
public Bitmap toSephia(Bitmap bmpOriginal)
{
int width, height, r,g, b, c, gry;
height = bmpOriginal.getHeight();
width = bmpOriginal.getWidth();
int depth = 20;
Bitmap bmpSephia = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bmpSephia);
Paint paint = new Paint();
ColorMatrix cm = new ColorMatrix();
cm.setScale(.3f, .3f, .3f, 1.0f);
ColorMatrixColorFilter f = new ColorMatrixColorFilter(cm);
paint.setColorFilter(f);
canvas.drawBitmap(bmpOriginal, 0, 0, paint);
for(int x=0; x < width; x++) {
for(int y=0; y < height; y++) {
c = bmpOriginal.getPixel(x, y);
r = Color.red(c);
g = Color.green(c);
b = Color.blue(c);
gry = (r + g + b)/3;
r = g = b = gry;
r = r + (depth * 2);
g = g + depth;
if(r > 255) {
r = 255;
}
if(g > 255) {
g = 255;
}
bmpSephia.setPixel(x, y, Color.rgb(r, g, b));
}
}
return bmpSephia;
}
Wenn Sie Instanz Bild haben, dann können Sie ColorMartix verwenden es in Sepia zu ziehen. Lassen Sie mich beschreiben, wie Sie Drawable verwenden können.
public static void setSepiaColorFilter(Drawable drawable) {
if (drawable == null)
return;
final ColorMatrix matrixA = new ColorMatrix();
// making image B&W
matrixA.setSaturation(0);
final ColorMatrix matrixB = new ColorMatrix();
// applying scales for RGB color values
matrixB.setScale(1f, .95f, .82f, 1.0f);
matrixA.setConcat(matrixB, matrixA);
final ColorMatrixColorFilter filter = new ColorMatrixColorFilter(matrixA);
drawable.setColorFilter(filter);
}
Beispielprojekt wurde Bitbucket-GitHub bewegt. Bitte überprüfen Sie Release section, APK-Binärdatei zum Testen ohne Kompilierung herunterladen.
Wie bekomme ich ColorMatric für mehr Effekte, wie Neon, Indiglow, Aqua, lebendige, etc, warten auf verwandten Link/hinweis/guide ... –
Sie müssen entsprechende Farbmatrixwerte finden, um diesen Effekt zu erhalten. Sorry, aber ich kenne keine Ressource, wo Sie es finden können. Bitte posten Sie es hier, wenn Sie etwas Nützliches finden. Danke – rude
Ich fand das für ColorMatrix, und setze simillar Werte für meine erforderlichen Farbeffekte. http://docs.rainmeter.net/tips/colormatrix-guide –
Ich habe auf the OP's answer verbessert. Dies läuft kompetitiv schnell im Vergleich zu the ColorMatrix
method, aber produziert einen schöneren braunen Ton. (meiner Meinung nach)
public Bitmap toSepiaNice(Bitmap color) {
int red, green, blue, pixel, gry;
int height = color.getHeight();
int width = color.getWidth();
int depth = 20;
Bitmap sepia = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
int[] pixels = new int[width * height];
color.getPixels(pixels, 0, width, 0, 0, width, height);
for (int i = 0; i < pixels.length; i++) {
pixel = pixels[i];
red = (pixel >> 16) & 0xFF;
green = (pixel >> 8) & 0xFF;
blue = pixel & 0xFF;
red = green = blue = (red + green + blue)/3;
red += (depth * 2);
green += depth;
if (red > 255)
red = 255;
if (green > 255)
green = 255;
pixels[i] = (0xFF << 24) | (red << 16) | (green << 8) | blue;
}
sepia.setPixels(pixels, 0, width, 0, 0, width, height);
return sepia;
}
Dies wird zu mehr Verarbeitungszeit, wenn das Bildpixel ist mehr so jeder andere Weg ist da? – blackjack
View this Gist https://gist.github.com/pmcfernandes/8261130 – pedrofernandes
Diese Methode schlägt auf transparente Pixel –