Android - 任何用于将转发标签添加到位图的库

2024-01-05

我一直在尝试制作一个照片共享应用程序,能够将您的图像和名称添加到图像中。我一整天都在用 Canvas 搞乱,但没有得到好的结果。我能够绘制名称和位图,但它们看起来不太好。

这就是为什么我在这里询问是否有任何库或代码可以帮助我制作类似于[this][1]的东西。我找不到任何东西。

编辑:抱歉没有添加我自己的代码

这是我最近尝试的代码

public void AddText(Position2D pos){
//Position2D is an enum having the 4 corners of the image
    bmWorking= bmOriginal.copy(Bitmap.Config.ARGB_8888,true);
    Canvas canvas = new Canvas(bmWorking);


    Paint paint = new Paint();
    paint.setColor(Color.WHITE);
    paint.setStyle(Paint.Style.FILL);
    Paint textPaint = new Paint();
    textPaint.setColor(Color.BLACK);
    float width = (35f/100f) * bmWorking.getWidth();
    float height = (width/16f) * 3;
    textPaint.setTextSize(height - 4);  //I wanted to have some space (margin) above and below the text
    textPaint.setTextAlign(Paint.Align.LEFT);
    float [] coords = getPositionCoords(pos, width, height);  //getPositionCoords returns a float array with the Left,Top,Right,Bottom position calculated based on the width and height
    canvas.drawRect(coords[0],coords[1], coords[2], coords[3],paint);
    username = "Haider Ali Punjabi";
    canvas.drawText(username, coords[0] ,coords[3], textPaint);
    bitmapView.setImageBitmap(bmWorking);

}

这是结果 https://i.stack.imgur.com/qNQ9I.png

UPDATE:@pskink 给了我这段代码 http://pastebin.com/JFYbDNLc效果很好


如果您想自定义它,则不要使用纯白色矩形(如原始代码中所示),而是使用Drawable结果可能是这样的:

代码:

// for int gravity: see android.view.Gravity, like Gravity.LEFT, Gravity.BOTTOM, etc
// for example:
// Bitmap out = addText(this, in, "Haider Ali Punjabi", android.R.drawable.alert_light_frame, Gravity.BOTTOM, new Point(10, 10));
public Bitmap addText(Context ctx, Bitmap in, String text, int resId, int gravity, Point pad) {
    if (pad == null) pad = new Point();

    Bitmap out = in.copy(Bitmap.Config.ARGB_8888, true);
    Canvas canvas = new Canvas(out);

    Paint textPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
    textPaint.setColor(Color.BLACK);
    textPaint.setTextAlign(Paint.Align.LEFT);
//    textPaint.setTextSize(128);

    Rect inBounds = new Rect();
    textPaint.getTextBounds(text, 0, text.length(), inBounds);
    float scale = out.getWidth() * 0.35f / inBounds.width();

    Rect container = new Rect(0, 0, out.getWidth(), out.getHeight());
    Rect outBounds = new Rect();
    int w = (int) (inBounds.width() * scale);
    int h = (int) (inBounds.height() * scale);
    Gravity.apply(gravity, 2 * pad.x + w, 2 * pad.y + h, container, outBounds);

    Drawable dr = ctx.getResources().getDrawable(resId);
    Rect padding = new Rect();
    dr.getPadding(padding);
    dr.setBounds(outBounds.left - padding.left, outBounds.top - padding.top, outBounds.right + padding.right, outBounds.bottom + padding.bottom);
    dr.draw(canvas);
    Matrix matrix = new Matrix();
    RectF src = new RectF(inBounds);
    RectF dst = new RectF(outBounds);
    dst.inset(pad.x, pad.y);
    matrix.setRectToRect(src, dst, Matrix.ScaleToFit.CENTER);
    canvas.concat(matrix);
    canvas.drawText(text, 0, 0, textPaint);
    return out;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android - 任何用于将转发标签添加到位图的库 的相关文章

随机推荐

  • 创建状态项 - 图标显示,菜单不显示

    在基于文档的项目中 我试图创建一个状态菜单 我有一个构建状态栏的单例类 并且我从应用程序委托启动它 如您所见 当我运行它时 我没有收到任何错误 但只有状态栏的图像 但没有下拉菜单 我在 IB 中创建了菜单 我搞砸了什么 Delegate i
  • 使用 Swift 计算 SpriteKit 中的 delta

    我正在尝试通过重构我的一款旧游戏来快速学习 我需要重写我的update计算增量时间的方法 这段代码works但很丑 我该怎么办properly重写这个 import SpriteKit class GameScene SKScene var
  • Flot:如何在条形图中设置数字样式?

    我在用着流程图 http www flotcharts org 它是插件Flot barnumbers Demo http joetsoi github io flot barnumbers 显示图表 我需要在栏中显示数字 它可以工作 不幸
  • FPDF 在每个 A4 尺寸页面的页脚处获取页码

    我正在使用 FPDF 创建 PDF 报告 现在 如何在页面底部的报告的每一页上生成页码 以下是生成 2 页 PDF 的示例代码
  • Scala 宏检查树的匿名函数

    我刚刚开始使用宏 感觉我错过了一些非常明显的痛苦 我想检查 AST 中是否有传递给我的宏的匿名 lambda 函数 最终我想对它做一些事情 但我在第一个障碍上就失败了 我的代码如下所示 object Test extends App doI
  • 错误:DisplayListCanvas.throwIfCannotDraw 处的 RuntimeException

    我的应用程序在牛轧糖模拟器和许多设备上运行得很好 但我在 google play crash reports 中发现了这个异常 我不知道为什么会发生这种情况 该异常仅在牛轧糖设备 上引起 例外 java lang RuntimeExcept
  • 父变量在 ng-content 内不起作用

    Intro 我正在研究 ng2 组件 其结构如下
  • 在 C# (ASP.net) 中删除重复查询字符串的最快方法是什么

    我遇到一个问题 该公司使用业务跟踪系统来捕获用户的首次访问并将他们重定向到他们试图访问的页面 但附加了引用 URL 现在 由于引用网址包含该人试图访问的网址 不要问为什么 我不知道 它会导致我拥有每个值的重复项 所以参观这个 home as
  • 根据运输类别有条件地隐藏 WooCommerce 运输方式

    使用 WooCommerce v3 2 4这个网站 这里 https mur hatcherydev xyz WP v4 9 和 11 种运输类别为超重 超大且适用统一费率的产品 20前往加拿大和 25到美国 所有其他产品均采用统一费率运输
  • 如何垂直对齐 span 标签内的内容?

    如何使 x 在跨度的中间垂直对齐 foo height 50px border solid black 1px display inline block vertical align middle span class foo x span
  • 如何将 scons 指向安装在我的主目录中的不同编译器?

    我尝试编辑 SConstruct 以指向不同的 gcc 编译器 但它似乎总是使用 usr bin gcc 和 usr bin g 中定义的编译器 env DefaultEnvironment env CC home aaron devel
  • 我如何利用 NSCoding 将对象转换为 NSDictionary ?

    我有一个实现 NSCoding 的 Objective C 类 我需要以 NSDictionary 的形式返回此类实例的表示形式 其中键是属性名称 值是属性值 如何在 Objective C 中进行这种转换 NSObject 有一个方法di
  • NumPy:取消排序/撤消反向/降序排序

    我可以对 numpy 数组进行就地反向排序 降序排序 但我还需要能够稍后对其进行取消排序 撤消 给出一个未排序的例子 a np array 1 2 1 3 2 0 I tried i a 1 argsort argsort BAD atte
  • MySQL 中使用 WHERE EXISTS 进行 DELETE 查询[重复]

    这个问题在这里已经有答案了 我正在使用 MySql 中的一张表执行 where contains 查询 它与 SELECT 一起工作正常 但当我尝试执行 DELETE 而不是 SELECT 时失败 如何使用删除执行相同的查询 提前谢谢了 s
  • PreparedStatement,使用一个参数多个“?”

    我有一个插入如果不存在查询 如下所示 BEGIN IF NOT EXISTS SELECT FROM tbl sampleTable WHERE name or subject BEGIN INSERT INTO tbl sampleTab
  • Windows Azure AppFabric 服务是否已停止?

    我正在使用 Azure Microsoft 提供了一项与云中的 AppFabric 配合使用的服务 网上有很多关于云中此服务的文章 但我在 Azure 中没有找到它 您可以告诉我此服务是否是重命名了 这就是为什么我找不到或者它已经停产了 服
  • 为什么我的 .tfignore 文件不忽略我的包文件夹

    我正在使用 Visual Studio 2013 Pro 和 Team Foundation Server 2013 我有一个包含以下行的 tfignore 文件 packages
  • 激活和停用调用功能

    我尝试使用 C 语言延迟 Unity 中的函数 通过使用Invoke 我实现了当光标移动到某个区域时添加延迟 但是 现在我需要取消Invoke当光标从该特定区域移开时 这个想法是 当我不小心将光标移动到该区域时 我可以取消那里调用的任何函数
  • Android AlarmManager.set(...):电池电量低时从未收到通知

    我正在尝试使用 AlarmManager 在我的应用程序中安排延迟检查 具体来说 用户接近某个位置 N 分钟后 我想检查他们是否仍然在那里 如果是 则向他们发送通知 我通过检查他们是否已进入我的位置更新接收器中的区域来实现此目的 如果他们已
  • Android - 任何用于将转发标签添加到位图的库

    我一直在尝试制作一个照片共享应用程序 能够将您的图像和名称添加到图像中 我一整天都在用 Canvas 搞乱 但没有得到好的结果 我能够绘制名称和位图 但它们看起来不太好 这就是为什么我在这里询问是否有任何库或代码可以帮助我制作类似于 thi