创建位图时,请使用与密度无关的像素作为宽度和高度

时间:2013-08-02 22:30:27

标签: android

Bitmap.createBitmap(int width,int height,Bitmap.Config config)方法只是说给它一个高度和一个宽度。没有迹象表明这些是实际像素还是dp像素。

我的问题:

1。)这些值是dp像素吗? 2.)如果没有,有没有办法使用dp像素作为高度和宽度的参数?

谢谢。

3 个答案:

答案 0 :(得分:14)

它使用像素(常规,而不是dp像素)。使用以下方法将dp中的参数转换为常规像素:

public static float dipToPixels(Context context, float dipValue) {
    DisplayMetrics metrics = context.getResources().getDisplayMetrics();
    return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dipValue, metrics);
}

信用:Convert dip to px in Android

答案 1 :(得分:7)

您可以使用XML文件中定义的宽度和高度创建Bitmap

这就是我所做的:

  • 创建一个XML Values文件,并将其命名为您喜欢的任何名称(drawing_dimensions.xml)
  • 在XML文件中:

    <强> drawing_dimensions.xml

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <dimen name="bitmapWidth">160dp</dimen>
        <dimen name="bitmapHeight">128dp</dimen>
    </resources>
    

    这可以更改为您更喜欢使用的单位

  • 然后,您只需在活动中创建对此的引用:

    <强> DrawingActivity.java

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    
       //onCreate.....
    
    
    // referencing to the dimension resource XML just created
    int bitmapWidth = getResources().getDimension(R.dimen.bitmapWidth);
    int bitmapHeight = getResources().getDimension(R.dimen.bitmapHeight);
    
    Bitmap myBitmap = Bitmap.createScaledBitmap(
            getResources().getDrawable(R.drawable.my_image), bitmapWidth,
            bitmapHeight, true);
    

我希望这有帮助,快乐编码!

答案 2 :(得分:3)

值以像素为单位(常规,而不是dp)。值得一提的是,在所有接受像素尺寸的功能中,尺寸通常是常规像素尺寸。这适用于视图宽度和高度,位置,可绘制尺寸等。

如果您希望提供dp,那么从dp到像素的转换功能很多。这是一个非常直接的公式。

如果您希望在位图解码过程中解码位图并更改密度,请查看BitmapFactory.decodeXYZ并仔细查看密度相关字段中的BitmapFactory.Options。如果您希望相同的源位图(例如,从Web下载的位图)在不同的密度设备上具有不同的像素大小,这可能很有用。