【问题标题】:How can I make this transformation of an image in Android using Java如何使用 Java 在 Android 中对图像进行这种转换
【发布时间】:2014-02-10 19:31:56
【问题描述】:

有没有办法在 Android (Java) 中处理图像/drawable 以使图像的最后 X 像素拉伸或重复到屏幕底部。我想知道这是否可以实现,以及这种效果或现有算法是否有名称。先感谢您。请注意,我知道 9patch 图像,这不是我想要的方式,我明确需要在代码中应用它。提前谢谢你,下面是一张图片

【问题讨论】:

    标签: java android image-processing bitmap android-drawable


    【解决方案1】:

    实现这一目标的最佳选择是使用Draw 9-patch 图像

    教程:

    Android 9 Patch Image Tutorial

    Draw9patch 教程 [高清]

    【讨论】:

      【解决方案2】:

      可能的算法:

      1) 获取图片的 Bitmap 对象

      2) 将图像像素(bitmap.getPixels(...) 方法)读入 int[] 数组

      3) 创建所需高度的空白位图

      4) 使用 setPixels() 方法将初始位图数据复制到一个新的

      5) 使用相同的方法将最后一行复制到新的位图任意多次(明智地使用偏移参数)

      对于这么小的任务来说,这听起来太复杂了,但是你要求一种以编程方式实现它的方法,所以你去吧

      编辑更简单的方法:

      使用 Shader.TileMode.CLAMP

      1) 从您的位图或资源创建 BitmapDrawable

      2) 使用 setTileModeY(TilMode.CLAMP);

      【讨论】:

      • 适合我的方法。这是我正在寻找的算法。我可能正在尝试它,但如果您知道一些教程/链接,他们将非常受欢迎。
      • 查看另一种方法
      【解决方案3】:

      您可以从图像中取出一条并像这样使用重复

      <?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);
      

      【讨论】:

      • 我想到了这个解决方案,但那将是我最后一次了,我想知道我是否能够以编程方式处理图像
      • 这个选项比使用 Draw 9-patch 图像需要更多的过程。
      • @Elenasys 他说他不想在“我知道 9patch 图像,这不是我想要的方式”的问题中使用 Ninepatch。
      • 也许这样说不专业,但非常感谢你,我爱你,它成功了:)
      • 你知道如何在不旋转位图的情况下调整参数以获得底部 1 px 部分吗?这有效,但它从顶部提取它。我想我需要修改这个 c.drawRect(30, 30, 100, 100, p);
      猜你喜欢
      • 1970-01-01
      • 2016-09-29
      • 1970-01-01
      • 2020-03-20
      • 2015-11-03
      • 1970-01-01
      • 2021-02-23
      • 2012-06-21
      • 1970-01-01
      相关资源
      最近更新 更多