關於Bitmap的旋轉

2021-06-18 04:47:20 字數 2803 閱讀 9998

在原來的專案裡有表盤指標旋轉的需求,做出來的效果被我查出乙個小小bug:

先貼**:

1

2 34 5

6 78 9

1011

1213

1415

1617

1819

2021

public

void

setrotate

(float

degrees

)stick

.setimagebitmap(ns

);rotateanimationra=

animfactory

.createrotateanimation

(-degrees

-146,0

,animation

.relative_to_self

,0.5f

,animation

.relative_to_self

,0.5f

,1500

);ra

.setinterpolator

(new

acceleratedecelerateinterpolator

());

stick

.startanimation(ra

);}

他的做法是

一、s = bitmapfactory.decoderesource(this.getresources(), r.drawable.watch_stick_blue);

二、設matrix matrix = new matrix(); matrix可設scale translate rotate等屬性

三、bitmap ns = bitmap.createbitmap(s, 0, 0, s.getwidth(), s.getheight(), matrix, true);

這種做法可以實現旋轉,但是我發現這種做法會使影象大小變化,

可以看出90度的時候的指標明顯比45度的時候長,而在我去掉**中matrix對scale的縮放以及在xml裡對布局的控制之後

截圖如下:

可以看出,此時指標長度相等,但是45度時候的比原變大了,究其原因,是因為createbitmap(bitmap source, int x, int y, int width, int height, matrix m, boolean filter)是先將source原始檔按引數width和height從座標x、y處擷取,然後根據matrix進行轉換,這樣就可以理解,無論是在matrix裡進行了縮放還是在xml裡對圖的大小進行控制,旋轉後的新圖中的指標會和原來的指標大小不同

所以目前來說我想到的辦法是,**鑑於專案中的指標為正方形**,對第一次createbitmap做出的圖s2再進行一次擷取,判斷後根據s1和s2較小的邊最為最新截圖的邊,以保證圖形大小相仿。

**如下:

1

2 34 5

6 78 9

1011

1213

1415

1617

1819

2021

2223

2425

2627

2829

3031

3233

3435

3637

3839

4041

4243

public

void

setrotate

(float

degrees

,boolean

isccurrentlefttab

,int

index

)matrix

matrix2

=new

matrix

();bitmap

nns;if(

ns.getwidth

()>s.

getwidth

()&&ns.

getheight

()>s.

getheight

())elseif(

ns.getwidth

()>s.

getwidth

()&&ns.

getheight

()<=s.

getheight

())elseif(

ns.getwidth

()<=s.

getwidth

()&&ns.

getheight

()>s.

getheight

())else

stick

.setimagebitmap

(nns

);stick

.setbackgroundcolor

(color

.cyan

);}

還不成熟,歡迎指正~

Bitmap和Canvas的平移 縮放 旋轉

matrix matrix new matrix matrix.posttranslate tx,ty matrix.postscale scale,scale canvas.drawbitmap bmp,matrix,null 畫布不動,bmp先平移後縮放,均是相對於原始座標 等價 matrix ...

關於使用BitMap的小結

建立bitmap bitmap bm null bm bitmap.createbitmap w,h,config.alpha 8 每個畫素佔乙個位元組 8位 bm bitmap.createbitmap w,h,config.argb 4444 兩個位元組 bm bitmap.createbitm...

關於Bitmap壓縮快取的問題

本人剛入門新手一枚。今天在練習bitmap記憶體快取和本地快取。使用到bitmapfactory.options 的時候遇到了一點問題,在options設定之後無法獲取到bitmap。如下 private bitmap downloadbitmap string imageurl catch exc...