Android 手机照相并在imageview中显示,并在图片上放入文字

创建个Imageview控件:
<ImageView
    android:id="@+id/openCamera"
    android:layout_width="100dp"
    android:layout_height="100dp"
    android:clickable="true"
    android:src="@drawable/camera"
    />

实例化控件:

opencamera = (ImageView) findViewById(R.id.openCamera);
opencamera.setOnClickListener(this);
//打开相机
case R.id.openCamera:
    if (tv_coordinate.getText().toString()==""){
        Toast.makeText(MainActivity.this, "请先定位再拍照!", Toast.LENGTH_LONG).show();
        break;
    }else {
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); // 关键:新建相机的 Intent
        startActivityForResult(intent, TAKE_PHOTO_CODE); // 加载相机 Activity ,TAKE_PHOTOS_CODE 是自定义的 ing 型常量,用于在 onActivityResult 处理识别返回的数据
        break;
    }
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    switch (requestCode) {
        case 1:
            //判断是否有权限
            if(permissions[0] == "android.permission.ACCESS_FINE_LOCATION"){
                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                } else {
                    Toast.makeText(this, "你拒绝了权限申请,可能无法打开相机扫码哟!", Toast.LENGTH_SHORT).show();
                }
            }
            if(permissions[0] == "android.permission.CAMERA") {
                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    goScan();
                } else {
                    Toast.makeText(this, "你拒绝了权限申请,可能无法打开相机扫码哟!", Toast.LENGTH_SHORT).show();
                }
            }
            break;
        default:
    }
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == TAKE_PHOTO_CODE && resultCode == RESULT_OK) {
        Bitmap bm = (Bitmap) data.getExtras().get("data");
        //在图片上添加文字
        Bitmap texttobitmap = ImageUtil.drawTextToBitmap(MainActivity.this,bm,tv_coordinate.getText().toString());
        opencamera.setImageBitmap(texttobitmap);
        Bitmap yasuobitmap = BitmapOption.bitmapOption(texttobitmap,1);
        stringnumberphooto = BitmapOption.bitmapToString(yasuobitmap);
    }
}
//在蹄片上添加文字
public class ImageUtil {

    //gResId:图片id,gContext系统资源,
    public static Bitmap drawTextToBitmap(Context gContext,Bitmap bitmap,
                                          String gText) {
        String text = String.valueOf(gText);

        Resources resources = gContext.getResources();
        float scale = resources.getDisplayMetrics().density;
        // resource bitmaps are imutable,
        // so we need to convert it to mutable one
        bitmap = bitmap.copy(Bitmap.Config.ARGB_8888, true);

        Canvas canvas = new Canvas(bitmap);
        Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
        paint.setColor(Color.WHITE);
        paint.setTextSize((int) (5 * scale));
        paint.setDither(true);
        paint.setFilterBitmap(true);
        paint.setTextAlign(gText.length() > 9 ? Paint.Align.CENTER : Paint.Align.RIGHT);
        Rect bounds = new Rect();
        paint.getTextBounds(text, 0, text.length(), bounds);
        int x = (bitmap.getWidth() - bounds.width()) / 2;
        int y = (bitmap.getHeight() - bounds.height()) / 2;
        canvas.drawText(text, x * 2, y / 6, paint);
        return bitmap;
    }
}

//压缩图片

public static Bitmap bitmapOption(Bitmap image, int size) {
    ByteArrayOutputStream out = new ByteArrayOutputStream();
    image.compress(Bitmap.CompressFormat.JPEG, 85, out);
    float zoom = (float) Math.sqrt(size * 1024 / (float) out.toByteArray().length);
    Matrix matrix = new Matrix();
    matrix.setScale(zoom, zoom);
    Bitmap result = Bitmap.createBitmap(image, 0, 0, image.getWidth(), image.getHeight(), matrix, true);
    out.reset();
    result.compress(Bitmap.CompressFormat.JPEG, 85, out);
    while (out.toByteArray().length > size * 1024) {
        System.out.println(out.toByteArray().length);
        matrix.setScale(0.9f, 0.9f);
        result = Bitmap.createBitmap(result, 0, 0, result.getWidth(), result.getHeight(), matrix, true);
        out.reset();
        result.compress(Bitmap.CompressFormat.JPEG, 85, out);
    }
    return result;
}

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值