Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 位图到九匹配到新缩放位图_Android_Bitmap_Nine Patch - Fatal编程技术网

Android 位图到九匹配到新缩放位图

Android 位图到九匹配到新缩放位图,android,bitmap,nine-patch,Android,Bitmap,Nine Patch,我的问题是: 我需要创建一个使用NinePatch创建的重新缩放位图 我当前的系统从NinePatch文件创建位图。然后将其输入到NinePatch(或NinePatchDrawable)中。然后我需要调整它的大小并输出到另一个位图 我已经复习过了,这对我很有帮助 这是我目前的代码: try { Bitmap bitmap1 = BitmapFactory.decodeStream(getAssets().open("gfx/head.9.png")); //

我的问题是:

我需要创建一个使用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();
}

你是在问如何画九分之一的地图吗?如果是这样,请创建一个指向要绘制到的位图的画布,并使用Drawable.draw()将NinePatchDrawable渲染到画布中。确保使用Drawable.setBounds设置所需的大小

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的大小,上下文是您的应用程序上下文,因此您可以在id处获取ninepatch资源


请注意,如果您打算在OpenGL中使用此位图,则X和Y必须为2的幂次方

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

在获得实际位图之前,我们如何获得x和y?解决方案中缺少的是位图是否应用于ImageView的主图像或背景。是否可能知道id是否为有效的9补丁id,以及没有其他资源?此解决方案运行良好,但已弃用了
NinePatchDrawable
构造函数-要使用未弃用的版本,请将
context.getResources()
作为第一个参数(在
位图
之前)。