Нарисуйте контур из изображения - PullRequest
1 голос
/ 25 апреля 2020

Я хотел нарисовать контур вокруг рисунка, нарисовав и развернув вторую картинку на заднем плане, но у меня не получилось, как я могу нарисовать обычный штрих?

Контур, который я нарисовал: Click to see the picture

Контур, который я хочу нарисовать: Click to see the picture

Мой код;

private Bitmap ContourBitmap() {
int strokeWidth = 8;
Bitmap originalBitmap =  BitmapFactory.decodeResource(getResources(), R.drawable.flower_icon);
Bitmap newStrokedBitmap = Bitmap.createBitmap(originalBitmap.getWidth() + 2 * strokeWidth, 
originalBitmap.getHeight() + 2 * strokeWidth, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(newStrokedBitmap);
float scaleX = (originalBitmap.getWidth() + 2.0f * strokeWidth) / originalBitmap.getWidth();
float scaleY = (originalBitmap.getHeight() + 2.0f * strokeWidth) / originalBitmap.getHeight();
Matrix matrix = new Matrix();
matrix.setScale(scaleX, scaleY);
canvas.drawBitmap(originalBitmap, matrix, null);
canvas.drawColor(Color.WHITE, PorterDuff.Mode.SRC_ATOP); //Color.WHITE is stroke color
canvas.drawBitmap(originalBitmap, strokeWidth, strokeWidth, null);
}

1 Ответ

0 голосов
/ 25 апреля 2020

Я думаю, что вы на правильном пути ...

Вот стратегия, вместо масштабирования просто нарисуйте одну и ту же исходную картинку несколько раз каждый раз с небольшим смещением, см. Пример ниже:

var canvas = document.getElementById('canvas')
var ctx = canvas.getContext('2d')
var img = new Image;
img.onload = draw;
img.src = "http://i.stack.imgur.com/UFBxY.png";

var s = 10, // thickness scale
  x = 15, // final position
  y = 15;

function draw() {
  ctx.globalAlpha = 0.2
  ctx.filter = 'brightness(0%)'
  for (i = 0; i < 360; i++)
    ctx.drawImage(img, x + Math.sin(i) * s, y + Math.cos(i) * s);
  ctx.globalAlpha = 1
  ctx.filter = 'none'
  ctx.drawImage(img, x, y);
}
<canvas id=canvas width=350 height=600></canvas>

Я применил filter = 'brightness(0%)', но вы можете подать еще много:
https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/filter

Я использую HTML canvas, но эта же идея должна хорошо "перевести" на android canvas.

...