2010-08-09 142 views
2

旋转时利用矩阵位图的位图,顶点并不稳定..我的代码旋转利用矩阵

Matrix matrix = new Matrix(); 
    matrix.postRotate(mDegree,100,100); 
    mCompasstemp = Bitmap.createBitmap(mCompPic, 0, 0, mCompPic.getWidth(), mCompPic.getHeight(), matrix, true); 
    mCompassHud.setImageBitmap(mCompasstemp); 

输出类似 -bitmap会旋转。 - 我的位图的外观不稳定。 位图正在调整大小

我需要禁用图像调整大小,并使旋转stable.Can您请为此建议一个解决方案?

回答

1

不知道这是你寻找的,但它可能有帮助。

Android使用其内置的兼容性功能为不同像素密度的屏幕适当缩放和渲染位图。有两种缩放,预缩放和自动缩放的方法。

当内部绘制位图时(这是您使用createBitmap时的操作),它将从资源预缩放位图并自动缩放。

转到http://developer.android.com/guide/practices/screens_support.html,并在检查: 4.使用密度和/或尺寸专用资源: 预缩放和位图和九补丁

5

,而不是直接从创建新的位图的自动缩放原始的,另一个(更直接的,恕我直言)选项是创建合成的位图,创建一个与该位图的画布,然后在画布上进行旋转/平移/缩放,并通过画布将原始位图绘制到新的位图上。

基本上,你正在寻找,然后在:

scaledImage = Bitmap.createBitmap (croppedWidth, croppedHeight, Bitmap.Config.ARGB_8888); 

    Canvas offscreenCanvas = new Canvas (scaledImage); 
    Matrix matrix = new Matrix(); 
    matrix.setRotate (rotations, centreX, centreY); 
    matrix.postScale(scaleX, scaleY); 
    offscreenCanvas.setMatrix (matrix); 

    offscreenCanvas.drawBitmap (pickedImage, 0, 0, new Paint(Paint.DITHER_FLAG)); 
+0

谢谢..完美.. – 2013-11-15 11:17:34

1

我已经试过这个代码和旋转稳定在位图的中心

matrix.reset(); 
matrix.setRotate(degree, Xpos+bitmap.getWidth()/2, Ypos+bitmap.getHeight()/2); 

,然后在画布doDraw()

canvas.setMatrix(matrix);    
canvas.drawBitmap(bitmap, Xpos, Ypos, null); 
canvas.setMatrix(null); 

Xpos和Ypos是位图的X和Y位置 的setMatrix(空),设置矩阵为null,从而使旋转并不影响该位图 后,并没有始终创建新的位图,所以对性能的伟大 我希望帮助

+0

你可以发表你的完整代码吗 – baloo 2013-08-21 06:38:44

0

我知道它的一个老问题,但随着代码的所有答案意味着画布,所以没有继承人画布为我工作的解决方案:旋转你的位图,你就重新调整到所需的大小后

Matrix matrix = new Matrix(); 
matrix.postRotate(mDegree,100,100); 
mCompasstemp = Bitmap.createBitmap(mCompPic, 0, 0, mCompPic.getWidth(), 
    mCompPic.getHeight(), matrix, true); 

mCompasstemp = Bitmap.createScaledBitmap(mCompassTemp, mCompPic.getWidth(), 
    mCompic.getHeight(), false); 

mCompassHud.setImageBitmap(mCompasstemp); 

所以基本上。可能不是最佳实践,但至少不必创建额外的画布,如果你不想/需要,因为涉及Paint()对象也不是一个廉价的操作。