0

我正在尝试从网上下载图像,并将其转换为 Ninepatch 格式,我如何选择可拉伸像素超出了该线程的范围。

我正在尝试使用gist 解决方案,但我无法让它工作。

这是源代码:

NinePatchDrawable np = createNinePathWithCapInsets(res, bitmap, top,left, bitmap.getWidth() - right, bitmap.getHeight() - bottom, null);

并获得结果位图:

Bitmap outputBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(outputBitmap);
//np.setBounds(0, 0, width, height);
np.draw(canvas);
canvas.drawBitmap(outputBitmap, width, height, new Paint());

返回的位图不包含源位图,看起来就像 4 个分段(rect seg')。

即使不使用 OpenGL,我也可以找到任何其他方法来实现该目标

结果图像是:

在此处输入图像描述

4

1 回答 1

1

尝试这个:

public static byte[] getChunk(int xs, int xe, int ys, int ye) {
    ByteBuffer b = ByteBuffer.allocate(84).order(ByteOrder.nativeOrder());
    b.put((byte) 1); // wasDeserialized
    b.put((byte) 2); // numXDivs
    b.put((byte) 2); // numYDivs
    b.put((byte) 9); // numColors
    b.putInt(0);     // UNKNOWN
    b.putInt(0);     // UNKNOWN
    b.putInt(0);     // paddingLeft
    b.putInt(0);     // paddingRight
    b.putInt(0);     // paddingTop
    b.putInt(0);     // paddingBottom
    b.putInt(0);     // UNKNOWN
    b.putInt(xs);    // segX start
    b.putInt(xe);    // segX end
    b.putInt(ys);    // segY start
    b.putInt(ye);    // segY end
    for (int i = 0; i < 9; i++) {
        b.putInt(1);     // NO_COLOR
    }
    return b.array();
}

你可以在 NinePatchDrawable 构造函数中使用它(Bitmap, byte[], Rect, String)

于 2013-11-14T16:01:45.283 回答