Рисование растрового изображения на текущем клипе на холсте с рамкой (Paint) - PullRequest
5 голосов
/ 11 июня 2011

Я изучаю Android, написав игру, и у меня проблема с графическим API.

Я хочу нарисовать изображение в форме контура, а затем добавить границу контура. Я смог обрезать изображение с помощью Path, но не могу найти способ добавить границу к нему. Хотя это было бы просто, потому что API поддерживает объект Paint для методов Canvas.draw *.

Обновление

В исходном вопросе мой Путь содержит два прямоугольника и @ christopher-souvey ответил правильно. Однако при добавлении еще одного метода clipPath () возникает другая проблема.

Я обновил предыдущий код, добавив еще один круг в Path. Вот мой новый код:

Bitmap srcImage = BitmapFactory.decodeStream(getAssets().open("panda.jpg"));
Bitmap bitmapResult = Bitmap.createBitmap(srcImage.getWidth(), srcImage.getHeight(), Bitmap.Config.ARGB_8888);
Path path = new Path();

// This is my border
Paint paint = new Paint();
paint.setStyle(Style.STROKE);
paint.setColor(Color.RED);
paint.setStrokeWidth(2);
paint.setAntiAlias(true);

Canvas canvas = new Canvas(bitmapResult);

// Overlay two rectangles
path.addRect(10, 10, 70, 70, Path.Direction.CCW); 
path.addRect(40, 40, 120, 120, Path.Direction.CCW);
canvas.drawPath(path , paint);
canvas.clipPath(path, Region.Op.INTERSECT);

path.reset();
path.addCircle(40, 80, 20, Path.Direction.CCW); 
canvas.drawPath(path , paint);
canvas.clipPath(path, Region.Op.DIFFERENCE);

// The image is drawn within the area of two rectangles and a circle
// Although I suppose that puting Paint object into drawBitmap() method will add a red border on result image but it doesn't work
canvas.drawBitmap(srcImage, 0, 0, paint);

((ImageView)this.findViewById(R.id.imageView1)).setImageBitmap(bitmapResult);

Вот результат из моего кода: http://i.stack.imgur.com/8j2Kg.png

И это то, что я ожидаю: http://i.stack.imgur.com/iKhIr.png

Я что-то пропускаю, чтобы это работало?

1 Ответ

1 голос
/ 12 июня 2011

Попробуйте использовать canvas.drawPath(path, paint) после drawBitmap Возможно, вам придется вставить canvas.save перед клипом и canvas.restore перед drawPath (я не уверен, происходит ли обводка внутри или вне линий контура).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...