我遇到了一個奇怪的問題。我的Android項目中有多個圖像,我將其作爲.png文件存儲在res \ drawable下。我能夠很容易地在運行時提取圖像並將其轉換爲位圖是這樣的:來自資源的圖像正確縮放,但SQlite的圖像blob不是 - Android
Drawable d = getResources().getDrawable(R.drawable.imageId);
Bitmap bitmap = ((BitmapDrawable)d).getBitmap();
這個偉大的工程和形象得到正確縮放,無論該設備具有什麼樣的屏幕密度。我所有的圖像都是200像素×200像素,我的圖像佈局配置爲200像素×200像素。
現在,我已存儲的所有圖像的斑點在SQLite數據庫由於可擴展性問題,我在運行時提取它們,並轉換爲位圖是這樣的:
byte[] bb = cursor.getBlob(columnIndex);
Bitmap bitmap = BitmapFactory.decodeByteArray(bb, 0, bb.length);
的圖像顯示,如果畫面精細密度是標準160傾角。但是如果密度更小或更大,則圖像不會縮放,並在160傾角時保持200像素x 200像素。因此,基本上,在較小的屏幕上(120傾角),圖像佔用的空間比應該更大,在更大的屏幕上(240傾角),它佔用的空間比它應該少。
有沒有其他人遇到這個奇怪的問題?任何解釋,解決方法,將非常感激。
非常感謝!
感謝您的迴應,但這並沒有奏效。然後,我將inDensity設置爲實際的屏幕密度,但這也沒有任何區別。這就是我所做的: DisplayMetrics metrics = new DisplayMetrics(); getWindowManager()。getDefaultDisplay()。getMetrics(metrics); BitmapFactory.Options options = new BitmapFactory.Options(); options.inDensity = metrics.densityDpi; 位圖位圖= BitmapFactory.decodeByteArray(bb,0,bb.length,options); – Ritesh
inDensity表示圖像的密度是多少,所以它應該在這種情況下爲160,而不依賴於屏幕dpi。取決於屏幕密度outDensity。所以正確的方法是:BitmapFactory.Options options = new BitmapFactory.Options(); options.inDensity = 160; – Mikooos