位图到NinePatch到新的缩放位图

时间:2011-07-23 17:57:13

标签: android bitmap nine-patch

我的问题是:

我需要创建一个使用NinePatch创建的重新缩放的位图。

我当前的系统从NinePatch文件创建一个Bitmap。然后将其输入NinePatch(或NinePatchDrawable)。然后我需要调整它并输出到另一个Bitmap。

我已经审核了this,这有点帮助。

这是我目前的代码:

try {
        Bitmap bitmap1 = BitmapFactory.decodeStream(getAssets().open("gfx/head.9.png"));

        // Using NinePatch?
        NinePatch patch = new NinePatch(bitmap1, bitmap1.getNinePatchChunk(), null);
        // Or NinePatchDrawable?
        NinePatchDrawable patch = new NinePatchDrawable(bitmap1, bitmap1.getNinePatchChunk(), new Rect(), null);

        // Set dimensions from NinePatch and create new bitmap
        // Bitmap bitmap2 = ?
}
catch (IOException e) {
        e.printStackTrace();
}

3 个答案:

答案 0 :(得分:14)

public static Bitmap get_ninepatch(int id,int x, int y, Context context){
        // id is a resource id for a valid ninepatch

        Bitmap bitmap = BitmapFactory.decodeResource(
                context.getResources(), id);

        byte[] chunk = bitmap.getNinePatchChunk();
        NinePatchDrawable np_drawable = new NinePatchDrawable(bitmap,
                chunk, new Rect(), null);
        np_drawable.setBounds(0, 0,x, y);

        Bitmap output_bitmap = Bitmap.createBitmap(x, y, Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(output_bitmap);
        np_drawable.draw(canvas);

        return output_bitmap;
    }

X和Y是你想要九个补丁的大小,上下文是你的应用程序上下文,所以你可以得到你的九个补丁资源位于id

请注意,如果您打算在OpenGL X中使用此位图,并且Y必须是2的幂

答案 1 :(得分:0)

您是否在询问如何绘制NinePatchDrawable?如果是这样,创建一个指向要绘制的位图的Canvas,并使用Drawable.draw()将NinePatchDrawable渲染到Canvas中。请务必使用Drawable.setBounds来设置所需的大小。

答案 2 :(得分:0)

Tasomaniac - 为了获得该方法的x和y,我使用的是窗口或布局大小或者九个补丁需要的东西。如果您的窗口或布局重新调整大小,只需插入x和y,宽度和高度可以是: (例如popwindow)object.getViewTreeObserver()。addOnGlobalLayoutListener(new OnGlobalLayoutListener()...然后每当某个特定对象或布局发生变化时,只需将x和y变为整数。