如何生成位图?
How to generate Bitmap?
我想写一个android收据程序,把text、setLogo和image写入Bitmap。我通过互联网进行了搜索,但没有一个与我要实现的目标相关。反正我有办法做到吗?
我的收据输出格式如下:
_____________
| *********** |
| * Logo * |
| *********** |
| Date |
| Amount |
| Card No |
| |
| Signature |
|_____________|
供您参考,我的目的是让用户在终端打印收据之前查看收据。在 printReceipt 函数中将完成所有生成收据位图的工作,而 printPreview 函数将把位图设置到 imageView 中。
现实世界中的例子:-
超市收据,当我们购买大量商品时,数据会不断增加,我尝试将这些数据写入位图并打印出来或通过电子邮件发送。
我猜你写错标题了。如果您想设计收据,则必须使用 XML 布局设计来设计它。对于您的收据,我有这个设计。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:padding="16dp"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<ImageView
android:id="@+id/imageview"
android:layout_centerHorizontal="true"
android:background="@mipmap/ic_launcher"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TableLayout
android:stretchColumns="*"
android:layout_marginTop="20dp"
android:layout_below="@id/imageview"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TableRow>
<TextView
android:textAppearance="@style/TextAppearance.AppCompat.Large"
android:text="Date"
/>
<TextView
android:id="@+id/text_view_date"
android:textAppearance="@style/TextAppearance.AppCompat.Large"
tools:text="14/06/2019"
/>
</TableRow>
<TableRow>
<TextView
android:textAppearance="@style/TextAppearance.AppCompat.Large"
android:text="Amount"
/>
<TextView
android:id="@+id/text_view_amount"
android:textAppearance="@style/TextAppearance.AppCompat.Large"
tools:text="0"
/>
</TableRow>
<TableRow>
<TextView
android:textAppearance="@style/TextAppearance.AppCompat.Large"
android:text="Card Number"
/>
<TextView
android:id="@+id/text_view_card_number"
android:textAppearance="@style/TextAppearance.AppCompat.Large"
tools:text="4587 8983 7456 2233"
/>
</TableRow>
<TableRow>
<TextView
android:textAppearance="@style/TextAppearance.AppCompat.Large"
android:text="Signature"
/>
<ImageView
android:background="@mipmap/ic_launcher"
/>
</TableRow>
</TableLayout>
</RelativeLayout>
这个XML你会看到这样
现在您可以将值添加到文本视图中。然后如果你想把这个屏幕转换成位图,你可以截图。
希望这对您有所帮助。
您可以使用以下代码将布局视图直接转换为位图。
View v = printPreviewLayout;
Bitmap bmp = Bitmap.createBitmap(v.getWidth(), v.getHeight(), Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(bmp);
v.draw(c);
try{
File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "Image_" + System.currentTimeMillis() + ".png");
FileOutputStream out = new FileOutputStream(file);
bmp.compress(Bitmap.CompressFormat.PNG, 90, out);
out.close();
MediaScannerConnection.scanFile(mContext, new String[] { file.toString() }, null,new MediaScannerConnection.OnScanCompletedListener() {
public void onScanCompleted(String path, Uri uri) {
Log.i("ExternalStorage", "Scanned " + path + ":");
Log.i("ExternalStorage", "-> uri=" + uri);
}
});
Toast.makeText(mContext, "Image downloaded to"+file.toString(), Toast.LENGTH_LONG).show();
}
这将绘制 printPreviewLayout 视图的位图。
您可以将 View
变成 Bitmap
。
来自此处的答案
private Bitmap createBitmapFromView(Context context, View view) {
DisplayMetrics displayMetrics = new DisplayMetrics();
((Activity) context).getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
view.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
view.measure(displayMetrics.widthPixels, displayMetrics.heightPixels);
view.layout(0, 0, displayMetrics.widthPixels, displayMetrics.heightPixels);
view.buildDrawingCache();
Bitmap bitmap = Bitmap.createBitmap(view.getMeasuredWidth(), view.getMeasuredHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
view.draw(canvas);
return bitmap;
}
但是如果你真的想从头开始创建 Bitmap
。这是一个可以将文本和图像绘制到图像数据(字节数组)中的库,您可以将其转换为 Bitmap
。 Graphics 2D. Here's a basic usage of it Convert text content to Image
我想写一个android收据程序,把text、setLogo和image写入Bitmap。我通过互联网进行了搜索,但没有一个与我要实现的目标相关。反正我有办法做到吗?
我的收据输出格式如下:
_____________
| *********** |
| * Logo * |
| *********** |
| Date |
| Amount |
| Card No |
| |
| Signature |
|_____________|
供您参考,我的目的是让用户在终端打印收据之前查看收据。在 printReceipt 函数中将完成所有生成收据位图的工作,而 printPreview 函数将把位图设置到 imageView 中。
现实世界中的例子:- 超市收据,当我们购买大量商品时,数据会不断增加,我尝试将这些数据写入位图并打印出来或通过电子邮件发送。
我猜你写错标题了。如果您想设计收据,则必须使用 XML 布局设计来设计它。对于您的收据,我有这个设计。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:padding="16dp"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<ImageView
android:id="@+id/imageview"
android:layout_centerHorizontal="true"
android:background="@mipmap/ic_launcher"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TableLayout
android:stretchColumns="*"
android:layout_marginTop="20dp"
android:layout_below="@id/imageview"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TableRow>
<TextView
android:textAppearance="@style/TextAppearance.AppCompat.Large"
android:text="Date"
/>
<TextView
android:id="@+id/text_view_date"
android:textAppearance="@style/TextAppearance.AppCompat.Large"
tools:text="14/06/2019"
/>
</TableRow>
<TableRow>
<TextView
android:textAppearance="@style/TextAppearance.AppCompat.Large"
android:text="Amount"
/>
<TextView
android:id="@+id/text_view_amount"
android:textAppearance="@style/TextAppearance.AppCompat.Large"
tools:text="0"
/>
</TableRow>
<TableRow>
<TextView
android:textAppearance="@style/TextAppearance.AppCompat.Large"
android:text="Card Number"
/>
<TextView
android:id="@+id/text_view_card_number"
android:textAppearance="@style/TextAppearance.AppCompat.Large"
tools:text="4587 8983 7456 2233"
/>
</TableRow>
<TableRow>
<TextView
android:textAppearance="@style/TextAppearance.AppCompat.Large"
android:text="Signature"
/>
<ImageView
android:background="@mipmap/ic_launcher"
/>
</TableRow>
</TableLayout>
</RelativeLayout>
这个XML你会看到这样
现在您可以将值添加到文本视图中。然后如果你想把这个屏幕转换成位图,你可以截图。
希望这对您有所帮助。
您可以使用以下代码将布局视图直接转换为位图。
View v = printPreviewLayout;
Bitmap bmp = Bitmap.createBitmap(v.getWidth(), v.getHeight(), Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(bmp);
v.draw(c);
try{
File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "Image_" + System.currentTimeMillis() + ".png");
FileOutputStream out = new FileOutputStream(file);
bmp.compress(Bitmap.CompressFormat.PNG, 90, out);
out.close();
MediaScannerConnection.scanFile(mContext, new String[] { file.toString() }, null,new MediaScannerConnection.OnScanCompletedListener() {
public void onScanCompleted(String path, Uri uri) {
Log.i("ExternalStorage", "Scanned " + path + ":");
Log.i("ExternalStorage", "-> uri=" + uri);
}
});
Toast.makeText(mContext, "Image downloaded to"+file.toString(), Toast.LENGTH_LONG).show();
}
这将绘制 printPreviewLayout 视图的位图。
您可以将 View
变成 Bitmap
。
来自此处的答案
private Bitmap createBitmapFromView(Context context, View view) {
DisplayMetrics displayMetrics = new DisplayMetrics();
((Activity) context).getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
view.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
view.measure(displayMetrics.widthPixels, displayMetrics.heightPixels);
view.layout(0, 0, displayMetrics.widthPixels, displayMetrics.heightPixels);
view.buildDrawingCache();
Bitmap bitmap = Bitmap.createBitmap(view.getMeasuredWidth(), view.getMeasuredHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
view.draw(canvas);
return bitmap;
}
但是如果你真的想从头开始创建 Bitmap
。这是一个可以将文本和图像绘制到图像数据(字节数组)中的库,您可以将其转换为 Bitmap
。 Graphics 2D. Here's a basic usage of it Convert text content to Image