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