gpt4 book ai didi

java - 如何在 Android 中将文本绘制到图像上

转载 作者:行者123 更新时间:2023-12-02 12:56:17 32 4
gpt4 key购买 nike

我已经尝试了无数种方法,但仍然没有达到预期的结果;我想要实现的是:

  • 绘制一个矩形,该矩形是屏幕的整个宽度和大约屏幕高度的 1/3,其中该矩形具有 50% 的可见性/alpha(因此可以在矩形下方稍微看到图像),并且将放置该矩形在屏幕的最底部
  • 在矩形内放置一个多行字符串,文本集中在矩形的中间
以上是我希望实现的基本概念,但如果可能的话,我想生成一个小正方形的 map ,位于矩形内的左侧 - 如何将其添加到位图中/canvas 也非常有用。

我当前的实现(没有正确的形状或文本大小)如下所示:

Bitmap bitmap = BitmapFactory.decodeByteArray(picture, 0, picture.length);
Bitmap newBitmap = ImageUtils.drawMultilineTextToBitmapV2(MainActivity.this, bitmap, imageText);

...

public static Bitmap drawMultilineTextToBitmapV2(Context context, Bitmap bitmap, String text) {

Bitmap.Config bitmapConfig = bitmap.getConfig();

if (bitmapConfig == null) {
bitmapConfig = Bitmap.Config.ARGB_8888;
}

Bitmap alteredBitmap = bitmap.copy(bitmapConfig, true);
Canvas canvas = new Canvas(alteredBitmap);

// Add image to canvas
Paint paint = new Paint();
canvas.drawBitmap(bitmap, 0, 0, paint);

// Add background for text
Paint p2 = new Paint();
p2.setStyle(Paint.Style.FILL);
p2.setColor(Color.GRAY);
p2.setAlpha(0x80);

// int padding = 50;
int padding = 1000;
Rect rect = new Rect(
canvas.getWidth() - padding, // Left
canvas.getHeight() - padding, // Top
padding, // Bottom
canvas.getWidth() + padding // Right
);
canvas.drawRect(rect, p2);

// Add text
paint.setColor(Color.WHITE);
paint.setTextSize(250);
canvas.drawText(text, bitmap.getWidth(), bitmap.getHeight(), paint);

canvas.save();
return alteredBitmap;
}

对此的任何帮助将不胜感激。

<小时/>

更新:

String saveFilePath = FileUtils.saveImageToInternalStorage(newBitmap, fileDirectory, fileName, dateObject);

...

位图/ Canvas 被保存到文件中,以便用户可以再次访问。

public static String saveImageToInternalStorage(Bitmap finalBitmap, File fileDirectory, String fileName, Date date) {

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy_MM_dd_HH_mm", Locale.UK);
String now = simpleDateFormat.format(date);

fileDirectory = new File(fileDirectory + DCA_FILE_PATH);
fileDirectory.mkdirs();

if (fileName.isEmpty()) {
DecimalFormat df = new DecimalFormat("000000");
int i = 1;
String startingNumber = df.format(i);
fileName = now + "-" + startingNumber + ".jpg";
} else {
fileName = now + "-" + fileName + ".jpg";
}

File file = new File(fileDirectory, fileName);
try {
FileOutputStream out = new FileOutputStream(file);
finalBitmap.compress(Bitmap.CompressFormat.JPEG, 90, out);
out.flush();
out.close();

} catch (Exception e) {
e.printStackTrace();
}

Log.d(TAG, "Saving Internal File to: " + file.getAbsolutePath());
return file.getAbsolutePath();

}

更新2:

申请流程:

  • 使用相机 View 在应用内拍照
  • 照片以字节形式返回并转换为位图
  • 位图转换为 Canvas ,需要在其中创建文本和矩形,然后再转换回位图
  • 然后将位图保存为文件
  • 用户点击文件查看包含文本/矩形的照片

最佳答案

您可以通过使用相对布局(也可以通过框架)来做到这一点,您可以在布局中设置 ImageView ,并在其上方的任何位置添加正方形或任何其他布局。类似以下代码你的 xml 布局:

<RelativeLayout
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:background="@drawable/bg_gv_item"
android:layout_width="match_parent"
android:layout_height="match_parent">

<ImageView
android:id="@+id/img_gv_medical_guide_item"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerInParent="true"
android:adjustViewBounds="true"
android:scaleType="centerCrop"
/>
<TextView
android:id="@+id/txt_category_title"
android:layout_gravity="center"
android:textColor="@color/colorWhite"
android:background="@drawable/bg_category_title_rounded_rectangle"
android:gravity="center_horizontal"
android:layout_centerInParent="true"
android:textStyle="bold"
android:textSize="15sp"
android:text=""
android:layout_margin="10dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />

使用 TextView 的可绘制背景,您可以根据需要控制它(1/3)屏幕或任何您想要的。希望这可以给您带来一点帮助。

关于java - 如何在 Android 中将文本绘制到图像上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44423511/

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