2013-01-04 28 views
3

我試圖從一個圖像的二十個副本創建一個環,它是完整環的1/20切片。我生成的是原始圖像旋轉到正確度的位圖。原始圖像是130x130正方形在不調整大小的情況下生成旋轉的位圖

original slice

產生旋轉片的代碼看起來是這樣的:

Bitmap bmp = BitmapFactory.decodeResource(context.getResources(), R.drawable.battery_green); 
    FileOutputStream fos; 
    for(int i = 0; i < 20; i++) { 
     String idName = "batt_s_"+i; 
     Matrix m = new Matrix(); 
     m.setRotate((i * 18)-8, bmp.getWidth()/2, bmp.getHeight()/2); 

     Bitmap newBmp = Bitmap.createBitmap(bmp, 0, 0, bmp.getWidth(), bmp.getHeight(), m, true); 
     try { 
      fos = context.openFileOutput(idName+"_"+color+".png", Context.MODE_WORLD_READABLE); 
      newBmp.compress(CompressFormat.PNG, 100, fos); 
      fos.close(); 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     m.reset(); 
     BattConfigureSmall.saveInitPref(context, true); 
    } 

,這些生成的位圖被最終被開槽到所有ImageViews具有scaleType =」中心「在他們的XML。但是,生成的輸出結果如下:

enter image description here

不完全是一個完美的戒指。切片本身,如果旋轉正確,確實會形成一個完美的環,因爲在API級別11中,我在這些ImageView上使用了android:rotate XML屬性,但我也需要支持API級別7-10,所以可以有人給我一些建議嗎?謝謝。

+0

是否有使用圖像而不是畫一個圓弧什麼特別的原因?這對我來說似乎更容易。 – qzikl

+0

我已經得到了一點點發光效果,並且就創意控制而言,我只是更願意使用圖像文件。更不用說我已經有了Android 3.x及更高版本的所有功能。 – Nick

回答

1

在這種情況下,不要使用createBitmap的矩陣,我認爲它會對圖像大小做一些奇怪的事情。相反,創建一個新的BitmapCanvas然後繪製它與矩陣:

Bitmap bmp = BitmapFactory.decodeResource(context.getResources(), R.drawable.battery_green); 
FileOutputStream fos; 
Paint paint = new Paint(); 
paint.setAntiAlias(true); 
Matrix m = new Matrix(); 

for(int i = 0; i < 20; i++) { 
    String idName = "batt_s_"+i; 
    m.setRotate((i * 18)-8, bmp.getWidth()/2, bmp.getHeight()/2); 

    Bitmap newBmp = Bitmap.createBitmap(bmp.getWidth(), bmp.getHeight(), Bitmap.Config.ARGB_8888); 
    Canvas canvas = new Canvas(newBmp); 
    canvas.drawBitmap(bmp, m, paint); 

    try { 
     fos = context.openFileOutput(idName+"_"+color+".png", Context.MODE_WORLD_READABLE); 
     newBmp.compress(CompressFormat.PNG, 100, fos); 
     fos.close(); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    m.reset(); 
    BattConfigureSmall.saveInitPref(context, true); 
} 
+0

drawBitmap的第一個參數應該是newBmp而不是bmp嗎?因爲newBmp是壓縮到文件中的位圖。和相關的問題,你的方法仍然打算實際上做任何寫入文件? – Nick

+0

不,'bmp'是正確的。你想繪製舊的位圖(但是用'm'變換)到新的位圖上。我添加的代碼不會寫入文件,您已經擁有的代碼('newBmp.compress')已經這樣做了。只要給它一個鏡頭,看看它是否適用於你(我試過了,它爲我工作)。 – kabuko

+0

我會被詛咒的,看起來好多了。圓形本身是完美的。唯一的問題是旋轉的圖像看起來非常鋸齒。有沒有辦法使畫布反別名? – Nick

相關問題