2013-08-08 3 views
0

У меня есть изображение с изображением. я нажимаю на изображение (onTouchEvent) и получили точки с координатами (х, у) и рисования линии между точками один за другим:Площадь здания на изображении, используя много точек

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    int positionX = (int) event.getRawX(); 
    int positionY = (int) event.getRawY() - 80; 
    switch (event.getAction() & MotionEvent.ACTION_MASK) { 
     case MotionEvent.ACTION_DOWN: 
      if (event.getAction() == MotionEvent.ACTION_DOWN) { 

       // Add current touch position to the list of points 
       pointsList.add(new Point(positionX, positionY)); 
       Log.d(TAG, " positionX: " + positionX + " positionY: " + positionY); 

       bitmap = bitmap.copy(Bitmap.Config.ARGB_8888, true); 

       Canvas canvas = new Canvas(bitmap); 
       Paint paint = new Paint(); 
       paint.setColor(Color.RED); 
       paint.setStrokeWidth(3); 

       // Iterate on the list 
       for (int i = 0; i < pointsList.size(); i++) { 
        Point current = pointsList.get(i); 

        // Draw points 
        canvas.drawCircle(current.x, current.y, 10, paint); 
        Log.d(TAG, " startCurrentX: " + current.x + " startCurrentY: " + current.y); 

        // Draw line with next point (if it exists) 
        if (i + 1 < pointsList.size()) { 
         Point next = pointsList.get(i + 1); 
         canvas.drawLine(current.x, current.y, next.x, next.y, paint); 
         Log.d(TAG, " currentX: " + current.x + " currentY: " + current.y + " nextX: " + next.x + " nextY: " + next.y); 
        } 
       } 
      } 

      setImageBitmap(bitmap); 
      break; 
    } 
    return true; 
} 

Так я получил много очков, и я должен вырезать область изображения в области все связанных точек. Мне нужна часть изображения в указанной области (область в связанных точках).

Как я могу получить область в точках и разрезать эту область изображения в изображении?

ответ

1

Это может помочь вам:

Создать путь из пунктов в списке, а также рассчитать нижние и верхние границы многоугольника, представленного ими.

Path polyPath = new Path(); 
int minX,minY,maxX,maxY; 
for(Point current : pointsList){ 
polypath.lineTo(current.x, current.y); 
//TO DO : also add calculation for minX,minY,maxX,maxY here // 
} 
polyPath.lineTo(pointsList.get(0).x, pointsList.get(0).y); 
polyPath.close(); 

Затем создайте обрезанные растровый следующим образом:

Paint paint = new Paint(); 
paint.setStyle(Paint.Style.FILL); 
paint.setXfermode(new PorterDuffXfermode(Mode.CLEAR)); 

polyPath.setFillType(Path.FillType.INVERSE_WINDING); 

Bitmap newBitmap = Bitmap.createBitmap(bitmap, minX, minY, maxX-minX, maxY-minY); 
Canvas canvas = new Canvas(newBitmap); 

canvas.drawPath(polyPath, paint); 
canvas.drawBitmap(newBitmap, 0, 0, paint); 
+0

POLYPATH здание хорошо, но на холст рисунка черного POLYPATH на площади с точками. Я не получал изображение из области с очками, но мне это нужно. – dikkini

+0

это ответ, но без polyPath – dikkini

+0

Я тебя не понял! – blackSmith

Смежные вопросы