2014-12-19 89 views
1

我目前正在使用多点裁剪工具,而且我一直在卡住几天。所以基本上,这是这样的:重新缩放位图的缩放视图

1)取大分辨率的照片与设备的摄像头
2)使用自定义类(它扩展了ImageView的)
3把生成位图在屏幕上)拉拢处理程序检测到的轮廓 - 这些轮廓稍后用于裁剪大位图。

Screen shot

我想拖动角落处理程序时,允许从用户更好的调整,以实现一个圆形变焦。这是我到目前为止已经完成:在画布上

@Override 
public void setImageBitmap(Bitmap bm) { 
    originalBitmap = bm.copy(Bitmap.Config.ARGB_8888, true); 
    shaderPaint = new Paint(); 

    shader = new BitmapShader(originalBitmap, TileMode.CLAMP, TileMode.CLAMP); 
    shaderPaint.setShader(shader); 

    shaderMatrix = new Matrix(); 
    .... 


@Override 
protected void onDraw(Canvas canvas) { 
    super.onDraw(canvas); 
    ....... 
    if (zooming) { 
     shaderMatrix.reset(); 
     inverseMatrix.reset(); 
     if (getImageMatrix().invert(inverseMatrix)) { 
      float[] pts = new float[2]; 

      pts[0] = currentMovedPoint.x; 
      pts[1] = currentMovedPoint.y; 
      inverseMatrix.mapPoints(pts); 
      shaderMatrix.postTranslate(-pts[0], -pts[1]);   
      shaderMatrix.postScale(2f, 2f); 

      shader.setLocalMatrix(shaderMatrix); 
      canvas.drawCircle(zoomCenterX, zoomCenterY, zoomRadius, shaderPaint); 
      canvas.drawLine(zoomCenterX - 20, zoomCenterY, zoomCenterX + 20, zoomCenterY, borderPaint); 
      canvas.drawLine(zoomCenterX, zoomCenterY - 20, zoomCenterX, zoomCenterY + 20, borderPaint); 
     } 
    } 

zoomCenterX和zoomCenterY是固定的点。问题是缩放视图不是以currentMovedPoint坐标为中心(它正好被zoomCenterX,zoomCenterY所偏移)。如果我将zoomCenterX和zoomCenterY设置为0,则缩放视图正确居中 - 但由于屏幕上只出现了四分之一的缩放圈,因此我无法使用它。

我试着通过zoomCenterX和zoomCenterY没有成功地转换shaderMatrix(缩放视图仍然不居中当前选定的点)。

我是以这种错误的方式行事还是有我失踪的事?

回答

0

好吧,所以发布问题让我再次检查我的算法。问题是我需要在将着色器矩阵附加到着色器之前对着色器矩阵应用另一个翻译。

,所以我说:

float[] centerPts = new float[2]; 
centerPts[0] = zoomCenterX; 
centerPts[1] = zoomCenterY; 
inverseMatrix.mapPoints(centerPts); 
shaderMatrix.postTranslate(-centerPts[0], centerPts[1]); 

shaderMatrix.postScale(2f, 2f);