3

我的问题是这样的:

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

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

我已经审查了这一点,它有很大帮助。

这是我当前的代码:

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();
}
4

3 回答 3

15
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 是您希望 Ninepatch 有多大, context 是您的应用程序上下文,因此您可以获取位于 id 的 Ninepatch 资源

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

于 2011-07-26T10:37:29.417 回答
0

您是在问如何绘制 NinePatchDrawable?如果是这样,请创建一个指向您要绘制的位图的 Canvas,然后使用 Drawable.draw() 将 NinePatchDrawable 渲染到 Canvas 中。一定要使用 Drawable.setBounds 来设置你想要的大小。

于 2011-07-23T18:48:50.717 回答
0

Tasomaniac - 为了获得该方法的 x 和 y,我正在使用窗口或布局大小或九个补丁所需的内容。如果您的窗口或布局可重新调整大小,只需插入 x 和 y 宽度和高度可能与:(例如 popwindow)object.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener()... 然后每次发生变化时特定对象或布局,只需将 x 和 y 转换为整数。

于 2013-07-25T06:32:51.363 回答