gpt4 book ai didi

java - 在位图上绘制固定位置的文本

转载 作者:行者123 更新时间:2023-12-02 02:49:22 25 4
gpt4 key购买 nike

我正在尝试使用下面的代码在位图上绘制两个文本,一切正常,但是如果尺寸较小,文本位置发生变化,则位图的尺寸会出现问题,例如

1080x1920

enter image description here

250x268

enter image description here

代码:

public Bitmap drawTextToBitmapVHS(Context gContext,
Bitmap bitmap) {
String PLAY = "PLAY ►";
String DATE = getDate(Calendar.getInstance());
android.graphics.Bitmap.Config bitmapConfig =
bitmap.getConfig();
if (bitmapConfig == null) {
bitmapConfig = android.graphics.Bitmap.Config.ARGB_8888;
}
bitmap = bitmap.copy(bitmapConfig, true);
Canvas canvas = new Canvas(bitmap);
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setColor(Color.WHITE);
double relation = Math.sqrt(canvas.getWidth() * canvas.getHeight()) / 250;
paint.setTextSize((float) (12 * relation));
paint.setTypeface(Typeface.create(Typeface.createFromAsset(getAssets(), "fonts/VCR.ttf"), Typeface.BOLD));
Rect bounds = new Rect();
paint.getTextBounds(DATE, 0, DATE.length(), bounds);
int horizontalSpacing = 24;
int verticalSpacing = 36;
int x = horizontalSpacing;
int y = bitmap.getHeight() - verticalSpacing;
canvas.drawText(PLAY,
x, bounds.height() + verticalSpacing, paint);
canvas.drawText(getHours(Calendar.getInstance()), x, y - 50, paint);
canvas.drawText(DATE, x, y, paint);
return bitmap;
}

尽管位图的大小与第一个图像(1080x1920)完全相同,但如何使文本固定,谢谢。

最佳答案

问题似乎出在您的硬编码间距上,也可能出在您对文本大小的计算上。如果您将它们与位图大小相关,可能会有所帮助,例如:

int horizontalSpacing = 24 * bitmap.getWidth() / 1080;
int verticalSpacing = 36 * bitmap.getHeight() / 1920;

这应该将位置设置为与 1080x1920 位图相同,但对于小位图,您可能会发现文本重叠,除非您类似地相对于位图高度调整文本大小:

paint.setTextSize((float) (70 * bitmap.getHeight() / 1920));

此外,您对时间字段的定位是硬编码的,需要更改:

int hoursOffset = 50 * bitmap.getHeight() / 1920;
canvas.drawText(getHours(Calendar.getInstance()), x, y - hoursOffset, paint);

综合起来,这将以与 1080x1920 位图相同的相对位置和大小绘制文本。

关于java - 在位图上绘制固定位置的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57120599/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com