将 /assets/image.png 转换为 byte[]
Convert /assets/image.png to byte[]
如何把/assets/image.png转byte[]?
我已经这样尝试过(基于在 SO 上找到的解决方案):
public void printimage(View view) {
AssetManager assetManager = getAssets();
InputStream inputStream = null;
try {
inputStream = assetManager.open("logo_print.png");
byte[] bytesLogo = IOUtils.toByteArray(inputStream);
int ret = printer.printImage(bytesLogo);
if (ret < 0) {
Toast(context, "printimage fail");
}
Toast(context, "image printed :)");
}
catch (IOException e){
Log.e("message: ", e.getMessage());
Toast(context, "printimage: convert image to Bytes fail");
}
}
printImage — 在包中声明如下:
public class Cprinter {
public native int printImage(byte[] bytes);
}
但是应用程序在打印 printimage() 时崩溃,错误是 "Native method not found: android.pt.Cprinter.printImage:([B)I"
我已将字节转换为字符串 (bytesLogo.toString()),每次执行此命令 returns 不同的结果:“[B@40d7c798”、“[B@40d848e0”、“ [B@40d59ff0", & 等等
目的:
我有一个带有内部收据打印机的 android 设备。供应商提供了库 (libfile.so) 和示例源,用于为设备开发自己的软件。打印简单的文本没问题,但我在打印图像(徽标)时遇到了麻烦。
Here is the vendors` tiny documentation.
p.s:我是 Java 的新手。
试试这个:
String filePath="file:///android_asset/logo_print.png";
Drawable d = Drawable.createFromPath(filePath);
和this.
将您的图像复制到可绘制文件夹中。然后按照以下步骤操作:
Drawable drawable= getResources().getDrawable(R.drawable.image);
类型转换为 BitmapDrawable,
Bitmap bitmap = ((BitmapDrawable)drawable).getBitmap();
ByteArrayOutputStream out = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);
byte[] buffer= stream.toByteArray();
您还可以尝试使用以下代码获取资产文件夹图像:
InputStream stream= null;
try {
stream = getAssets().open("fileName.extension");
byte[] fileBytes=new byte[stream.available()];
stream.read(fileBytes);
stream.close();
} catch (IOException e) {
e.printStackTrace();
}
试试这个
InputStream inputStream = getAssets().open("logo_print.png");
byte[] buffer = new byte[8192];
int bytesRead;
ByteArrayOutputStream output = new ByteArrayOutputStream();
while ((bytesRead = inputStream.read(buffer)) != -1) {
output.write(buffer, 0, bytesRead);
}
byte file[] = output.toByteArray();
字节数组包含
1B 2A n ml mh converted data 1B 4A 00
1B 2A -- begin the block
n - printing mode
a) Q110 support 4 kinds of printing modes,as follow:
n=0x21: 24-point double-density;
n=0x20: 24-point single-density;
n=0x01: 8-point double-density;
n=0x00: 8-point single-density;
b) NXP only support n=0x21: 24-point double-density;
converted data
1B 4A 00 end the block and execute print (print start)
像个聪明人
byte[0] = 0x1B;
byte[1] = 0x2A;
byte[2] = 0x21; // 24-point double-density;
and so on...
这适用于资产文件夹中的任何类型的文件
InputStream is = getAssets().open("image.png");
byte[] fileBytes=new byte[is.available()];
is.read( fileBytes);
is.close();
如何把/assets/image.png转byte[]?
我已经这样尝试过(基于在 SO 上找到的解决方案):
public void printimage(View view) {
AssetManager assetManager = getAssets();
InputStream inputStream = null;
try {
inputStream = assetManager.open("logo_print.png");
byte[] bytesLogo = IOUtils.toByteArray(inputStream);
int ret = printer.printImage(bytesLogo);
if (ret < 0) {
Toast(context, "printimage fail");
}
Toast(context, "image printed :)");
}
catch (IOException e){
Log.e("message: ", e.getMessage());
Toast(context, "printimage: convert image to Bytes fail");
}
}
printImage — 在包中声明如下:
public class Cprinter {
public native int printImage(byte[] bytes);
}
但是应用程序在打印 printimage() 时崩溃,错误是 "Native method not found: android.pt.Cprinter.printImage:([B)I"
我已将字节转换为字符串 (bytesLogo.toString()),每次执行此命令 returns 不同的结果:“[B@40d7c798”、“[B@40d848e0”、“ [B@40d59ff0", & 等等
目的: 我有一个带有内部收据打印机的 android 设备。供应商提供了库 (libfile.so) 和示例源,用于为设备开发自己的软件。打印简单的文本没问题,但我在打印图像(徽标)时遇到了麻烦。
Here is the vendors` tiny documentation.
p.s:我是 Java 的新手。
试试这个:
String filePath="file:///android_asset/logo_print.png";
Drawable d = Drawable.createFromPath(filePath);
和this.
将您的图像复制到可绘制文件夹中。然后按照以下步骤操作:
Drawable drawable= getResources().getDrawable(R.drawable.image);
类型转换为 BitmapDrawable,
Bitmap bitmap = ((BitmapDrawable)drawable).getBitmap();
ByteArrayOutputStream out = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);
byte[] buffer= stream.toByteArray();
您还可以尝试使用以下代码获取资产文件夹图像:
InputStream stream= null;
try {
stream = getAssets().open("fileName.extension");
byte[] fileBytes=new byte[stream.available()];
stream.read(fileBytes);
stream.close();
} catch (IOException e) {
e.printStackTrace();
}
试试这个
InputStream inputStream = getAssets().open("logo_print.png");
byte[] buffer = new byte[8192];
int bytesRead;
ByteArrayOutputStream output = new ByteArrayOutputStream();
while ((bytesRead = inputStream.read(buffer)) != -1) {
output.write(buffer, 0, bytesRead);
}
byte file[] = output.toByteArray();
字节数组包含
1B 2A n ml mh converted data 1B 4A 00
1B 2A -- begin the block
n - printing mode
a) Q110 support 4 kinds of printing modes,as follow:
n=0x21: 24-point double-density;
n=0x20: 24-point single-density;
n=0x01: 8-point double-density;
n=0x00: 8-point single-density;
b) NXP only support n=0x21: 24-point double-density;
converted data
1B 4A 00 end the block and execute print (print start)
像个聪明人
byte[0] = 0x1B;
byte[1] = 0x2A;
byte[2] = 0x21; // 24-point double-density;
and so on...
这适用于资产文件夹中的任何类型的文件
InputStream is = getAssets().open("image.png");
byte[] fileBytes=new byte[is.available()];
is.read( fileBytes);
is.close();