使用此代码:
Drawable blankDrawable = context.getResources().getDrawable(image);
Bitmap blankBitmap=((BitmapDrawable)blankDrawable).getBitmap();
我得到一个缩放到上下文密度的位图,保留位图的物理大小(基于其dpi值)。例如,我有一个405x500位图(dpi = 96)作为资源。但是当我将它加载到设备上时,我得到一张密度= 240的608x750图像。我想加载位图而不进行缩放。我该怎么做?
这个问题非常类似于:
How to create a Drawable from a stream without resizing it?
但是,在我的情况下不能使用该解决方案,因为我没有输入流。我所拥有的只是一个资源ID,而getDrawable()方法没有密度参数。一旦加载了位图,就太晚了 - 它已经调整好了。
谢谢。
答案 0 :(得分:28)
使用此
InputStream is = this.getResources().openRawResource(imageId);
Bitmap originalBitmap = BitmapFactory.decodeStream(is);
imageview.setImageBitmap(originalBitmap);
答案 1 :(得分:15)
使用
解码位图时BitmapFactory.decodeResource (Resources res, int id, BitmapFactory.Options opts)
首先将BitmapFactory.Options中的标记inScaled设置为false。
示例:
/* Set the options */
Options opts = new Options();
opts.inDither = true;
opts.inPreferredConfig = Bitmap.Config.RGB_565;
opts.inScaled = false; /* Flag for no scalling */
/* Load the bitmap with the options */
bitmapImage = BitmapFactory.decodeResource(context.getResources(),
R.drawable.imageName, opts);
答案 2 :(得分:5)
另一个好的选择可能是将位图放在drawable-nodpi
资源文件夹
答案 3 :(得分:3)
在res中创建一个drawable(不带hdpi / mdpi等)文件夹。将drawable保留在该文件夹中。现在试试吧。这可能会对你有帮助。
答案 4 :(得分:2)
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ImageView image = (ImageView) findViewById(R.id.test_image);
Bitmap bMap = BitmapFactory.decodeResource(getResources(), R.drawable.icon);
image.setImageBitmap(bMap);
}