【问题标题】:Android: padding left a bitmap with white colorAndroid:用白色填充位图
【发布时间】:2011-10-20 21:14:31
【问题描述】:

如何将位图左侧的 10 行全部设置为白色? 我有一个必须在左侧填充的位图。我想我可以在旧的 getpixel 上为每个位置创建一个新的图像,并在新的一个(白色或彩色)上设置像素而不是返回新的位图......这是错的吗? 有什么建议吗?非常感谢!

【问题讨论】:

    标签: java android colors bitmap padding


    【解决方案1】:

    我这样做只是为了从各个方面进行填充。希望它会帮助某人。 https://stackoverflow.com/a/44060669/6480433 & https://stackoverflow.com/a/6957333/6480433 这些答案的组合。

    Bitmap outputimage = Bitmap.createBitmap(Src.getWidth() + padding_x,Src.getHeight() + padding_y, Bitmap.Config.ARGB_8888);
            Canvas can = new Canvas(outputimage);
            can.drawBitmap(Src, padding_x, padding_y, null);
    
            Bitmap output = Bitmap.createBitmap(outputimage.getWidth()+padding_x, outputimage.getHeight() + padding_y, Bitmap.Config.ARGB_8888);
            Canvas canvas = new Canvas(output);
            canvas.drawBitmap(outputimage, 0, 0, null);    
      return output;
    

    【讨论】:

      【解决方案2】:

      这是一个使用 RxJava 的 kotlin 扩展函数来完成它。我还没有完全测试,但基于结合以前的答案得到一些东西

      fun Bitmap.pad(top: Float = 0F, bottom: Float = 0F, left: Float = 0F, right: Float = 0F): Single<Bitmap> {
          return Single.create<Bitmap> { emitter ->
              val output = Bitmap.createBitmap(
                  (width + left + right).toInt(),
                  (height + top + bottom).toInt(),
                  Bitmap.Config.ARGB_8888
              )
              val canvas = Canvas(output)
      
              canvas.drawBitmap(this, left, top, null)
      
              emitter.onSuccess(output)
          }.subscribeOn(Schedulers.computation())
      }
      

      我认为协程版本只是

      suspend fun Bitmap.pad(top: Float = 0F, bottom: Float = 0F, left: Float = 0F, right: Float = 0F): Bitmap {
          val output = Bitmap.createBitmap(
              (width + left + right).toInt(),
              (height + top + bottom).toInt(),
              Bitmap.Config.ARGB_8888
          )
          val canvas = Canvas(output)
      
          canvas.drawBitmap(this, left, top, null)
      
          return output
      }
      

      【讨论】:

        【解决方案3】:
        public Bitmap addPaddingTopForBitmap(Bitmap bitmap, int paddingTop) {
            Bitmap outputBitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight() + paddingTop, Bitmap.Config.ARGB_8888);
            Canvas canvas = new Canvas(outputBitmap);
            canvas.drawColor(Color.RED);
            canvas.drawBitmap(bitmap, 0, paddingTop, null);
            return outputBitmap;
        }
        
        public Bitmap addPaddingBottomForBitmap(Bitmap bitmap, int paddingBottom) {
            Bitmap outputBitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight() + paddingBottom, Bitmap.Config.ARGB_8888);
            Canvas canvas = new Canvas(outputBitmap);
            canvas.drawColor(Color.RED);
            canvas.drawBitmap(bitmap, 0, 0, null);
            return outputBitmap;
        }
        
        
        public Bitmap addPaddingRightForBitmap(Bitmap bitmap, int paddingRight) {
            Bitmap outputBitmap = Bitmap.createBitmap(bitmap.getWidth() + paddingRight, bitmap.getHeight(), Bitmap.Config.ARGB_8888);
            Canvas canvas = new Canvas(outputBitmap);
            canvas.drawColor(Color.RED);
            canvas.drawBitmap(bitmap, 0, 0, null);
            return outputBitmap;
        }
        
        public Bitmap addPaddingLeftForBitmap(Bitmap bitmap, int paddingLeft) {
            Bitmap outputBitmap = Bitmap.createBitmap(bitmap.getWidth() + paddingLeft, bitmap.getHeight(), Bitmap.Config.ARGB_8888);
            Canvas canvas = new Canvas(outputBitmap);
            canvas.drawColor(Color.RED);
            canvas.drawBitmap(bitmap, paddingLeft, 0, null);
            return outputBitmap;
        }
        

        【讨论】:

        • 非常感谢。您的功能易于使用。 +1。
        【解决方案4】:

        您可以改为创建具有额外填充像素数的新位图。 将此设置为画布位图并使用所需颜色为整个图像着色,然后复制您的位图。

        public Bitmap pad(Bitmap Src, int padding_x, int padding_y) {
            Bitmap outputimage = Bitmap.createBitmap(Src.getWidth() + padding_x,Src.getHeight() + padding_y, Bitmap.Config.ARGB_8888);
            Canvas can = new Canvas(outputimage);
            can.drawARGB(FF,FF,FF,FF); //This represents White color
            can.drawBitmap(Src, padding_x, padding_y, null);
            return outputimage;
        }
        

        【讨论】:

        • 完美!谢谢..还有一个问题..对于x-offset,您的意思是填充后剩下的第一个像素?
        • 假设我有一个带有尺寸(w256,h104)的位图,这是否能够通过在顶部和底部均匀添加空白而不拉伸图像来制作此图像(w256,h128)?
        • 不错,但它只在位图的顶部和左侧添加像素。没有找到所有 4 个面(上、左、右、下)。
        • @RahulSharma 我这样做是为了从各个方面进行填充。希望它会帮助某人。位图输出图像 = Bitmap.createBitmap(Src.getWidth() + padding_x,Src.getHeight() + padding_y, Bitmap.Config.ARGB_8888);画布可以=新画布(输出图像); can.drawBitmap(Src, padding_x, padding_y, null);位图输出 = Bitmap.createBitmap(outputimage.getWidth()+padding_x, outputimage.getHeight() + padding_y, Bitmap.Config.ARGB_8888);画布画布=新画布(输出); canvas.drawBitmap(outputimage, 0, 0, null);返回输出;
        【解决方案5】:

        你可能想看看这里:

        http://download.oracle.com/javase/1.4.2/docs/api/java/awt/image/BufferedImage.html

        您可能想要使用的方法是:getHeight() 然后您知道要设置多少像素并在 10 列上进行迭代

        和setRGB(int x, int y, int RGB)设置像素

        【讨论】:

        • 这适用于安卓系统吗?我有一个位图(android 类)图像..ho 可以切换到 BufferedImage?谢谢!
        猜你喜欢
        • 2010-10-29
        • 2022-10-15
        • 1970-01-01
        • 2010-12-15
        • 2011-03-17
        • 2017-04-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多