Растровое изображение в NinePatch для нового масштабированного растрового изображения - PullRequest
3 голосов
/ 23 июля 2011

Моя проблема заключается в следующем:

Мне нужно создать масштабированное растровое изображение, созданное с помощью 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();
}

Ответы [ 3 ]

14 голосов
/ 26 июля 2011
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 был равен, контекст - это контекст вашего приложения, поэтому вы можете получить свой ресурс ninepatch, расположенный с идентификатором

. Обратите внимание, если вы намереваетесь использовать этот растр вOpenGL X и Y должны иметь степень 2

0 голосов
/ 25 июля 2013

Tasomaniac - Чтобы получить мои x и y для этого метода, я использую окно или размер макета или то, что когда-либо было необходимо для девяти патчей.Если ваше окно или макет можно изменить, просто подключите x и y с шириной и высотой, например, с помощью: (например, popwindow) object.getViewTreeObserver (). AddOnGlobalLayoutListener (new OnGlobalLayoutListener () ... и затем каждый раз, когда что-то меняется с этимконкретный объект или макет, просто введите x и y в целые числа.

0 голосов
/ 23 июля 2011

Вы спрашиваете, как нарисовать NinePatchDrawable?Если это так, создайте Canvas, указывающий на растровое изображение, в которое вы хотите нарисовать, и визуализируйте NinePatchDrawable в Canvas с Drawable.draw ().Обязательно используйте Drawable.setBounds, чтобы установить нужный размер.

...