2012-08-28 263 views
0

我已經嘗試了幾個小時來旋轉位圖沒有成功。我已經在這個網站上閱讀了很多關於這個主題的文章,似乎最好的解決方案是創建一個臨時畫布。那麼我做到了這一點,我仍然沒有看到一個roated位圖。旋轉位圖不旋轉

我的位圖是一個40x40的藍色方形,我試圖旋轉它45度。這不是要求太多嗎?代碼運行時,屏幕上顯示的位圖是未旋轉的原始文件。 (我自己也嘗試沒有成功轉化爲好)

這裏是我的代碼:

// Load the bitmap resource 
    fillBMP2 = BitmapFactory.decodeResource(context.getResources(), R.drawable.test1); 
    // Copy to a mutable bitmap 
    mb = fillBMP2.copy(Bitmap.Config.ARGB_8888, true); 
    // Create canvas to draw to 
    Canvas offscreenCanvas = new Canvas (mb); 
    // Create Matrix so I can rotate it 
    Matrix matrix = new Matrix(); 
    matrix.setRotate (45); 
    offscreenCanvas.setMatrix (matrix); 
    // Send the contents of the canvas into a bitmap 
    offscreenCanvas.setBitmap(mb); 

在OnDraw中後來我做了以下內容:

canvas.drawBitmap(mb, 200, 200, null); 

任何想法,我是什麼做錯了?似乎它應該工作。

由於使用這種

Matrix matrix = new Matrix(); 
matrix.setRotate(15); 
canvas.drawBitmap(bmp, matrix, paint); 

setRotation方法需要在表示 度旋轉的浮子

+0

我不是太熟悉''Canvas''但我假設你應該改變''畫布。 setMatrix(Matrix)''渲染之前,而不是使用''offscreenCanvas''。 – harism

+0

檢查此SOF答案 http://stackoverflow.com/a/12044717/886001 –

回答

1

嘗試。

+0

我試着讓旋轉角度浮動沒有結果。我在OnDraw中調用canvas.drawBitmap只是爲了測試位圖旋轉的結果。 – Jack

0

您一定要使用轉換:請檢查此link

基本上它是這樣的:

// save the canvas 
ctx.save(); 

// move origin to center 
ctx.translate(x,y); 

// rotate 
ctx.rotate(angle * (Math.PI/180)); 

// draw image 
ctx.drawImage(image, x, y, w, h, .w/2, h/2, w, h); 

// restore 
ctx.restore(); 
1

嘗試......

Matrix matrix = new Matrix(); 

    float px = 200; 

    float py = 200; 

    matrix.postTranslate(-bitmap.getWidth()/2, -bitmap.getWidth()/2); 

    matrix.postRotate(45); 

    matrix.postTranslate(px, py); 

    canvas.drawBitmap(bitmap, matrix, paint);