8

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

我的问题:

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

谢谢你。

4

3 回答 3

16

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

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

信用:在 Android 中将 dip 转换为 px

于 2013-08-02T22:38:49.227 回答
7

您可以创建一个Bitmap在 XML 文件中定义的宽度和高度。

这就是我所做的:

  • 制作一个 XML 值文件并随意命名(drawing_dimensions.xml)
  • 在 XML 文件中:

    绘图尺寸.xml

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

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

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

    绘图活动.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);
    

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

于 2013-08-03T02:13:25.850 回答
3

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

如果您希望提供 dp,则有很多从 dp 到像素的转换函数。这是一个非常直接的公式。

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

于 2013-08-02T22:41:49.753 回答