Оценете темата:
  • 0 гласа - средно 0
  • 1
  • 2
  • 3
  • 4
  • 5

Филтри и Ефекти.
#1

Здравейте колеги. Правя едно приложение което трябва да слага филтър на тукощо направената снимка и да я запази с него. Направих камерата, но имам проблем с филтрите. Някой да има идея как може да стане.
Цитирай
Аксесоари
#2

Използвай ColorMatrix

Код:
Bitmap bitmap = Bitmap.createBitmap(original.getWidth(),
   original.getHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);

Paint paint = new Paint();
paint.setColorFilter(new ColorMatrixColorFilter(
   getColorMatrix()));
canvas.drawBitmap(original, 0, 0, paint);

return bitmap;
Ето ти малко примери за getColorMatrix(), можеш да си го направиш с параметър и вътре в него със switch да връщаш желания ColorMatrix :
 
За Grayscale:
Код:
private ColorMatrix getColorMatrix() {
 ColorMatrix colorMatrix = new ColorMatrix();
 colorMatrix.setSaturation(0);
 return colorMatrix;
}


За Sepia :

Код:
private ColorMatrix getColorMatrix() {
 ColorMatrix colorMatrix = new ColorMatrix();
 colorMatrix.setSaturation(0);

 ColorMatrix colorScale = new ColorMatrix();
 colorScale.setScale(1, 1, 0.8f, 1);

 // Convert to grayscale, then apply brown color
 colorMatrix.postConcat(colorScale);

 return colorMatrix;
}

За Binary :
Код:
private ColorMatrix getColorMatrix() {
 ColorMatrix colorMatrix = new ColorMatrix();
 colorMatrix.setSaturation(0);

 float m = 255f;
 float t = -255*128f;
 ColorMatrix threshold = new ColorMatrix(new float[] {
     m, 0, 0, 1, t,
     0, m, 0, 1, t,
     0, 0, m, 1, t,
     0, 0, 0, 1, 0
 });

 // Convert to grayscale, then scale and clamp
 colorMatrix.postConcat(threshold);

 return colorMatrix;
}

За Invert :
Код:
private ColorMatrix getColorMatrix() {
 return new ColorMatrix(new float[] {
     -1,  0,  0,  0, 255,
      0, -1,  0,  0, 255,
      0,  0, -1,  0, 255,
      0,  0,  0,  1,   0
 });
}

За Alpha blue

Код:
private ColorMatrix getColorMatrix() {
 return new ColorMatrix(new float[] {
        0,    0,    0, 0,   0,
     0.3f,    0,    0, 0,  50,
        0,    0,    0, 0, 255,
     0.2f, 0.4f, 0.4f, 0, -30
 });
}

За Alpha pink
Код:
private ColorMatrix getColorMatrix() {
 return new ColorMatrix(new float[] {
        0,    0,    0, 0, 255,
        0,    0,    0, 0,   0,
     0.2f,    0,    0, 0,  50,
     0.2f, 0.2f, 0.2f, 0, -20
 });
}

Можеш да използваш и LightingColorFilter(int mul, int add)
 // Първия параметър създава цвят по който да се умножават RGB каналите, а втория параметър добавя втори цвят
Аз съм го използвал само така :

Код:
paint.setColorFilter(new LightingColorFilter(Color.RED, 0));
 canvas.drawBitmap(original, 0, 0, paint);

A можеш да си поиграеш и с RenderScript за blur ефекти и тем подобни Smile


Цитирай
#3

С шейдъри, RenderScript, или OpenCL стават чудеса Wink

Тук съм направил подобно приложение с шейдъри на OpenGL ES 2.0: https://play.google.com/store/apps/detai...o.cartoony
Цитирай
#4

Забравих да спомена, че филтрите са направени от мен и са в PNG формат! Така че ми трябва друго решение.
Цитирай




Потребители разглеждащи темата: 1 гост(и)