android开发分享Android:如何覆盖位图/绘制位图?

其实我有两个问题:

对不起,长长的名单,但为了学习的兴趣,我想探索两种方法…

    我不相信没有人回答这个问题呢! SO上罕见的事件!

    1

    问题对我来说不太合理。 但是生病了。 如果你问直接绘制到一个canvas(多边形,阴影,文本等)VS加载一个位图,并将其布莱恩canvas上,这取决于您的绘图的复杂性。 随着绘图变得越来越复杂,所需的CPU时间将相应增加。 但是,将位图传输到canvas上始终是一个与位图大小成比例的恒定时间。

    2

    不知道什么是“什么”,我怎么能告诉你如何做到这一点? 你应该能够从#3的答案中找出#2。

    3

    假设:

    你可以做这样的事情:

     public void putOverlay(Bitmap bitmap, Bitmap overlay) { Canvas canvas = new Canvas(bitmap); Paint paint = new Paint(Paint.FILTER_BITMAP_FLAG); canvas.drawBitmap(overlay, 0, 0, paint); } 

    这个想法非常简单:一旦将一个位图与一个canvas相关联,就可以调用任何一个canvas的方法来绘制位图。

    这将适用于具有透明度的位图。 一个位图将具有透明度,如果它有一个alpha通道。 看看Bitmap.Config 。 你可能会想使用ARGB_8888。

    重要提示:查看这个 Android示例,了解可以执行绘制的不同方法。 它会帮助你很多。

    性能明智(精确地说是内存),位图是最好的使用对象,因为它们只是简单地包装本地位图。 一个ImageView是View的一个子类,BitmapDrawable内部包含一个Bitmap,但它也包含许多其他的东西。 但是这是一个过度简化。 你可以build议一个性能特定的场景,以获得准确的答案。

     public static Bitmap overlayBitmapToCenter(Bitmap bitmap1, Bitmap bitmap2) { int bitmap1Width = bitmap1.getWidth(); int bitmap1Height = bitmap1.getHeight(); int bitmap2Width = bitmap2.getWidth(); int bitmap2Height = bitmap2.getHeight(); float marginLeft = (float) (bitmap1Width * 0.5 - bitmap2Width * 0.5); float marginTop = (float) (bitmap1Height * 0.5 - bitmap2Height * 0.5); Bitmap overlayBitmap = Bitmap.createBitmap(bitmap1Width, bitmap1Height, bitmap1.getConfig()); Canvas canvas = new Canvas(overlayBitmap); canvas.drawBitmap(bitmap1, new Matrix(), null); canvas.drawBitmap(bitmap2, marginLeft, marginTop, null); return overlayBitmap; } 

    如果目的是获得一个位图,这是非常简单的:

     Canvas canvas = new Canvas(); canvas.setBitmap(image); canvas.drawBitmap(image2, new Matrix(), null); 

    最后,图像将包含图像和图像2的重叠。

    我认为这个例子肯定会帮助你在另一个图像上叠加一个透明的图像。 这是通过在canvas上绘制图像并返回位图图像成为可能。

    阅读更多或在这里下载演示

     private Bitmap createSingleImageFromMultipleImages(Bitmap firstImage, Bitmap secondImage){ Bitmap result = Bitmap.createBitmap(firstImage.getWidth(), firstImage.getHeight(), firstImage.getConfig()); Canvas canvas = new Canvas(result); canvas.drawBitmap(firstImage, 0f, 0f, null); canvas.drawBitmap(secondImage, 10, 10, null); return result; } 

    并在button点击时调用上述函数,并将两个图像传递给我们的函数,如下所示

     public void buttonMerge(View view) { Bitmap bigImage = BitmapFactory.decodeResource(getResources(), R.drawable.img1); Bitmap smallImage = BitmapFactory.decodeResource(getResources(), R.drawable.img2); Bitmap mergedImages = createSingleImageFromMultipleImages(bigImage, smallImage); img.setImageBitmap(mergedImages); } 

    对于两个以上的图像,你可以按照这个链接, 如何在Android上以编程方式合并多个图像

     public static Bitmap createSingleImageFromMultipleImages(Bitmap firstImage, Bitmap secondImage, ImageView secondImageView){ Bitmap result = Bitmap.createBitmap(firstImage.getWidth(), firstImage.getHeight(), firstImage.getConfig()); Canvas canvas = new Canvas(result); canvas.drawBitmap(firstImage, 0f, 0f, null); canvas.drawBitmap(secondImage, secondImageView.getX(), secondImageView.getY(), null); return result; } 

      以上就是android开发分享Android:如何覆盖位图/绘制位图?相关内容,想了解更多android开发(异常处理)及android游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/addevelopment/520216.html

      (0)
      上一篇 2020年12月6日
      下一篇 2020年12月6日

      精彩推荐