Как добавить эффект водяного знака к изображению в Android?
У меня есть изображение с рамками, и мне нужно добавить эффект водяного знака. Как мне это сделать?
5 ответов
Я нашел отличный учебник по обработке изображений Android здесь.
public static Bitmap mark(Bitmap src, String watermark, Point location, Color color, int alpha, int size, boolean underline) {
int w = src.getWidth();
int h = src.getHeight();
Bitmap result = Bitmap.createBitmap(w, h, src.getConfig());
Canvas canvas = new Canvas(result);
canvas.drawBitmap(src, 0, 0, null);
Paint paint = new Paint();
paint.setColor(color);
paint.setAlpha(alpha);
paint.setTextSize(size);
paint.setAntiAlias(true);
paint.setUnderlineText(underline);
canvas.drawText(watermark, location.x, location.y, paint);
return result;
}
спасибо Питу Хьюстону, который делится таким полезным учебником по базовой обработке изображений.
для других ссылок, если вы хотите добавить логотип своего приложения(который находится в вашей папке (папках)) поверх изображения, используйте следующий метод:
private Bitmap addWaterMark(Bitmap src) {
int w = src.getWidth();
int h = src.getHeight();
Bitmap result = Bitmap.createBitmap(w, h, src.getConfig());
Canvas canvas = new Canvas(result);
canvas.drawBitmap(src, 0, 0, null);
Bitmap waterMark = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.logo);
canvas.drawBitmap(waterMark, 0, 0, null);
return result;
}
Кажется, вы ищете waterrippleeffect
как этот. Проверка полного исходного кода. Также проверьте скриншот, как выглядит эффект.
Если кто-то все еще ищет это, я нашел ответ здесь
Он добавляет водяной знак к внизу справа части и Весы это согласно исходному изображению, которое было именно тем, что я искал.
/**
* Embeds an image watermark over a source image to produce
* a watermarked one.
* @param watermarkImageFile The image file used as the watermark.
* @param sourceImageFile The source image file.
* @param destImageFile The output image file.
*/
/**
* Adds a watermark on the given image.
*/
public static Bitmap addWatermark(Resources res, Bitmap source) {
int w, h;
Canvas c;
Paint paint;
Bitmap bmp, watermark;
Matrix matrix;
float scale;
RectF r;
w = source.getWidth();
h = source.getHeight();
// Create the new bitmap
bmp = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
paint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.DITHER_FLAG | Paint.FILTER_BITMAP_FLAG);
// Copy the original bitmap into the new one
c = new Canvas(bmp);
c.drawBitmap(source, 0, 0, paint);
// Load the watermark
watermark = BitmapFactory.decodeResource(res, R.drawable.dell_logo);
// Scale the watermark to be approximately 40% of the source image height
scale = (float) (((float) h * 0.40) / (float) watermark.getHeight());
// Create the matrix
matrix = new Matrix();
matrix.postScale(scale, scale);
// Determine the post-scaled size of the watermark
r = new RectF(0, 0, watermark.getWidth(), watermark.getHeight());
matrix.mapRect(r);
// Move the watermark to the bottom right corner
matrix.postTranslate(w - r.width(), h - r.height());
// Draw the watermark
c.drawBitmap(watermark, matrix, paint);
// Free up the bitmap memory
watermark.recycle();
return bmp;
}
и это хорошо прокомментировано, что является огромным плюсом!
используйте framelayout. поместите два imageviews внутри framelayout и укажите положение водяного знака imageview.