Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/198.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何向相机捕获的图像添加帧并保存_Android - Fatal编程技术网

Android 如何向相机捕获的图像添加帧并保存

Android 如何向相机捕获的图像添加帧并保存,android,Android,我想在相机捕获的图像上添加一个透明图像并将其保存到外部存储器。在此代码中,我可以从相机获取图像并将其保存到外部存储器。如果有人知道如何将图像覆盖添加到捕获的图像并将其保存,请告诉我如何修改此代码 这是我的Main3Activity.java文件 package rahula.shannirmala.com.blueandgoldperade2016; import android.content.Intent; import android.graphics.drawable.Drawable

我想在相机捕获的图像上添加一个透明图像并将其保存到外部存储器。在此代码中,我可以从相机获取图像并将其保存到外部存储器。如果有人知道如何将图像覆盖添加到捕获的图像并将其保存,请告诉我如何修改此代码

这是我的Main3Activity.java文件

package rahula.shannirmala.com.blueandgoldperade2016;

import android.content.Intent;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.support.v7.app.AppCompatActivity;
import android.widget.ImageView;

import java.io.File;


public class Main3Activity extends AppCompatActivity {
    ImageView imageView2;
    static final int CAM_REQUEST = 1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main3);
        imageView2 = (ImageView)findViewById(R.id.imageView2);
        Intent camera_intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        File file = getFile();
        camera_intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file));
        startActivityForResult(camera_intent,CAM_REQUEST);

    }

    private File getFile()
    {
        File folder = new File("sdcard/Blue_&_Gold_Perade");
        if (!folder.exists())
        {
            folder.mkdir();
        }

        File image_file = new File(folder,"selfie_cam.jpg");
        return image_file;

    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        String path = "sdcard/Blue_&_Gold_Perade/selfie_cam.jpg";
        imageView2.setImageDrawable(Drawable.createFromPath(path));
    }


}
这是我的activity_main3.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"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
 tools:context="rahula.shannirmala.com.blueandgoldperade2016.Main3Activity">

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">

    <ImageView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:id="@+id/imageView2"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true" />
    </LinearLayout>
</RelativeLayout>

将写外部存储权限添加到清单:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

您要添加的覆盖是Jpeg,Png?套印图像的大小(像素)?我想添加一个png文件。不知道像素大小,我想在捕获的图像上添加套印图像。如果相机是1300万像素,套印图像应该获得拍摄图像的像素大小,并且必须在其中套印。对不起,我的英语不好。请尝试下面的答案,我使用了不同的路径来保存图片,您没有。请查看下面的答案请尝试编辑的版本,不要忘记添加权限。如果您正在构建23 API,则在应用程序运行期间会提示您输入权限。我检查了此代码,并在图像视图上显示覆盖的图像,但是保存在图库中的图像不是覆盖图。它只是原始图像。如何使用覆盖图保存捕获的图像?请帮助meI在我的机器上运行代码,它工作正常,您获得了覆盖就绪的位图“imageView2.setImageBitmap(b);”,然后将其保存在您选择的位置。//获取路径并使用覆盖再次保存图像。您可以将它保存在您选择的其他位置。是的,它终于可以工作了。非常感谢。您是最棒的。非常感谢您的帮助。再次感谢您,我可以帮助您的孩子!:)还有一个问题,兄弟,第一张覆盖的图像保存在Blue&Gold Perade文件夹中,当我拍摄另一张图像时,该图像将替换为上一张图像。只有最后一张图像才在文件夹中。如何设置该设置以保存所有拍摄的覆盖图像
public class CameraActivity extends Activity {
            private static final String LOG_TAG = "error";
            ImageView imageView;
            static final int CAM_REQUEST = 1;
            Date curentTime;

            // Storage Permissions
            private static final int REQUEST_EXTERNAL_STORAGE = 1;
            private static String[] PERMISSIONS_STORAGE = {
                    Manifest.permission.READ_EXTERNAL_STORAGE,
                    Manifest.permission.WRITE_EXTERNAL_STORAGE
            };

            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_camera);

                verifyStoragePermissions(this);

                imageView = (ImageView)findViewById(R.id.imageView2);
                Intent camera_intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                File file = getFile();
                camera_intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file));
                startActivityForResult(camera_intent,CAM_REQUEST);

            }

            private File getFile()
            {
                curentTime = new Date();
                String root = Environment.getExternalStorageDirectory().toString();
                File folder = new File(root + "/Blue_&_Gold_Perade");
                if (!folder.mkdirs()) {
                    Log.e(LOG_TAG, "Directory not created");
                }

                File image_file = new File(folder,"selfie_cam"+curentTime+".jpg");                    
                return image_file;
            }


                @Override
                protected void onActivityResult(int requestCode, int resultCode, Intent     data) {
                    setAndSaveImageWithOverlay(getBitmapOfSnappedImage());
                    }

                public Bitmap getBitmapOfSnappedImage(){


                    String root = Environment.getExternalStorageDirectory().toString();
                    String path = root + "/Blue_&_Gold_Perade"+     "/selfie_cam"+curentTime+".jpg";

                        File image = new File(path);
                        BitmapFactory.Options bmOptions = new BitmapFactory.Options();
                        Bitmap bitmap =     BitmapFactory.decodeFile(image.getAbsolutePath(),bmOptions);
                        return bitmap;
                    }

                public void setAndSaveImageWithOverlay(Bitmap snappedImage){
                    Bitmap b = Bitmap.createBitmap(snappedImage.getWidth(),     snappedImage.getHeight(), Bitmap.Config.ARGB_8888);

                    //the overlay png file from drawable folder
                    Bitmap overlay = BitmapFactory.decodeResource(getResources(),     R.drawable.overlay);
                    overlay =     Bitmap.createScaledBitmap(overlay,snappedImage.getWidth(),snappedImage.getHeight    (),false);

                    //create canvas with a clean bitmap
                    Canvas canvas = new Canvas(b);
                    //draw the snappedImage on the canvas
                    canvas.drawBitmap(snappedImage, 0, 0, new Paint());
                    //draw the overlay on the canvas
                    canvas.drawBitmap(overlay, 0, 0, new Paint());

                    imageView.setImageBitmap(b);

                    SaveImage(b);
                    }


                private void SaveImage(Bitmap finalBitmap) {

                    String root = Environment.getExternalStorageDirectory().toString();
                    File myDir = new File(root + "/Blue_&_Gold_Perade");
                    myDir.mkdirs();
                    String fname = "selfie_cam"+curentTime+".jpg";
                    File file = new File (myDir, fname);
                    if (file.exists ()) file.delete ();
                    try {
                        FileOutputStream out = new FileOutputStream(file);
                        finalBitmap.compress(Bitmap.CompressFormat.JPEG, 90, out);
                        out.flush();
                        out.close();

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

                /**
                 * Checks if the app has permission to write to device storage
                 *
                 * If the app does not has permission then the user will be prompted to grant permissions
                 *
                 * @param activity
                 */
                public static void verifyStoragePermissions(Activity activity) {
                    // Check if we have write permission
                    int permission = ActivityCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE);

                    if (permission != PackageManager.PERMISSION_GRANTED) {
                        // We don't have permission so prompt the user
                        ActivityCompat.requestPermissions(
                                activity,
                                PERMISSIONS_STORAGE,
                                REQUEST_EXTERNAL_STORAGE
                        );
                    }
                }

        }