【发布时间】:2014-02-10 19:31:56
【问题描述】:
有没有办法在 Android (Java) 中处理图像/drawable 以使图像的最后 X 像素拉伸或重复到屏幕底部。我想知道这是否可以实现,以及这种效果或现有算法是否有名称。先感谢您。请注意,我知道 9patch 图像,这不是我想要的方式,我明确需要在代码中应用它。提前谢谢你,下面是一张图片
【问题讨论】:
标签: java android image-processing bitmap android-drawable
有没有办法在 Android (Java) 中处理图像/drawable 以使图像的最后 X 像素拉伸或重复到屏幕底部。我想知道这是否可以实现,以及这种效果或现有算法是否有名称。先感谢您。请注意,我知道 9patch 图像,这不是我想要的方式,我明确需要在代码中应用它。提前谢谢你,下面是一张图片
【问题讨论】:
标签: java android image-processing bitmap android-drawable
【讨论】:
可能的算法:
1) 获取图片的 Bitmap 对象
2) 将图像像素(bitmap.getPixels(...) 方法)读入 int[] 数组
3) 创建所需高度的空白位图
4) 使用 setPixels() 方法将初始位图数据复制到一个新的
5) 使用相同的方法将最后一行复制到新的位图任意多次(明智地使用偏移参数)
对于这么小的任务来说,这听起来太复杂了,但是你要求一种以编程方式实现它的方法,所以你去吧
编辑更简单的方法:
使用 Shader.TileMode.CLAMP
1) 从您的位图或资源创建 BitmapDrawable
2) 使用 setTileModeY(TilMode.CLAMP);
【讨论】:
您可以从图像中取出一条并像这样使用重复
<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/your_pattern"
android:tileMode="repeat" />
编辑:如果你想以编程方式
1- 使用来自cut the portion of bitmap 的代码从图像中裁剪:
private Bitmap cropBitmap1()
{
Bitmap bmp2 = BitmapFactory.decodeResource(this.getResources(), R.drawable.image1);
Bitmap bmOverlay = Bitmap.createBitmap(bmp2.getWidth(), 1, Bitmap.Config.ARGB_8888);
Paint p = new Paint();
p.setXfermode(new PorterDuffXfermode(Mode.CLEAR));
Canvas c = new Canvas(bmOverlay);
c.drawBitmap(bmp2, 0, 0, null);
c.drawRect(30, 30, 100, 100, p);
return bmOverlay;
}
2- 返回的位图,将其转换为bitmapdrawable:
BitmapDrawable navigationBackground =new BitmapDrawable(getResources(),bitmap);
navigationBackground.setTileModeX(Shader.TileMode.REPEAT);
【讨论】: