Android人脸应用:字节数组转Bitmap跨页传递与Base64转换实现
实现Android拍照后传递Bitmap并转换为Base64的完整流程
没问题,我来帮你一步步搞定这个需求,咱们从FaceTrackerActivity.java的修改开始,再到第二个Activity的逻辑实现:
1. 在FaceTrackerActivity中完成字节数组转Bitmap+传递逻辑
首先,假设你拍照后已经拿到了图片的字节数组(比如从相机回调里获取的byte[] data),先把它转换成Bitmap,然后给保存按钮添加点击事件,把Bitmap传递到下一个Activity:
// 1. 将图片字节数组转换为Bitmap byte[] imageBytes = ...; // 你的拍照字节数组 Bitmap bitmap = BitmapFactory.decodeByteArray(imageBytes, 0, imageBytes.length); // 2. 给保存按钮设置点击事件 Button saveBtn = findViewById(R.id.save_button); saveBtn.setOnClickListener(v -> { // 创建Intent,指向你的第二个Activity(比如ImagePreviewActivity) Intent intent = new Intent(FaceTrackerActivity.this, ImagePreviewActivity.class); // Bitmap实现了Parcelable接口,可以直接用putParcelableExtra传递 intent.putExtra("captured_bitmap", bitmap); startActivity(intent); });
小提示:如果Bitmap过大,传递时可能会触发
TransactionTooLargeException,你可以先对Bitmap进行压缩再传递,比如:ByteArrayOutputStream baos = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.JPEG, 80, baos); byte[] compressedBytes = baos.toByteArray(); intent.putExtra("compressed_bitmap", compressedBytes);到第二个Activity再把字节数组转回Bitmap即可。
2. 第二个Activity接收Bitmap并在ImageView展示
创建第二个Activity(比如命名为ImagePreviewActivity),在它的onCreate方法里接收Bitmap,然后显示到ImageView:
public class ImagePreviewActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_image_preview); ImageView imageView = findViewById(R.id.preview_image); // 接收Intent中的Bitmap Bitmap receivedBitmap = getIntent().getParcelableExtra("captured_bitmap"); if (receivedBitmap != null) { // 在ImageView中展示图片 imageView.setImageBitmap(receivedBitmap); // 调用方法将Bitmap转换为Base64 String base64String = convertBitmapToBase64(receivedBitmap); // 这里可以使用base64String做后续操作,比如上传服务器等 Log.d("Base64", "转换后的Base64字符串:" + base64String); } } }
3. 实现Bitmap转Base64的工具方法
在ImagePreviewActivity中添加一个工具方法,完成Bitmap到Base64的转换:
private String convertBitmapToBase64(Bitmap bitmap) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); // 选择压缩格式,JPEG适合照片,PNG适合透明图 bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos); byte[] imageBytes = baos.toByteArray(); // 使用Base64编码 return Base64.encodeToString(imageBytes, Base64.DEFAULT); }
注意:如果需要URL安全的Base64编码,可以把
Base64.DEFAULT换成Base64.URL_SAFE。
这样整个流程就通了:拍照后字节数组转Bitmap → 点击保存传递Bitmap到第二个Activity → 显示图片 → 转换为Base64。
内容的提问来源于stack exchange,提问作者salim ahmed
相关产品推荐
相关产品推荐

