如何在不调整大小的情况下从res加载位图?

时间:2011-10-01 08:48:32

标签: android bitmap

使用此代码:

    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()方法没有密度参数。一旦加载了位图,就太晚了 - 它已经调整好了。

谢谢。

5 个答案:

答案 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);
}

首先从布局中创建一个包含ImageView的ImageView实例。然后使用BitmapFactory.decodeResource()从应用程序图标(R.drawable.icon)创建一个位图。最后将新位图设置为布局的ImageView组件中显示的图像。