ক্যামেরা থেকে চিত্র ক্যাপচার করুন এবং ক্রিয়াকলাপে প্রদর্শন করুন


278

আমি একটি মডিউল লিখতে চাই যেখানে একটি বোতামের একটি ক্লিকের উপর ক্যামেরা খোলে এবং আমি একটি চিত্র ক্লিক করে ক্যাপচার করতে পারি। আমি যদি চিত্রটি পছন্দ না করি তবে আমি এটি মুছতে এবং আরও একটি ছবিতে ক্লিক করতে পারি এবং তারপরে চিত্রটি নির্বাচন করতে পারি এবং এটি ফিরে ফিরে এসে সেই চিত্রটি ক্রিয়াকলাপে প্রদর্শন করা উচিত।


3
আপনার একটি ক্যামেরা অভিপ্রায় খুলতে হবে, একটি চিত্র ক্যাপচার করতে হবে, এসডিকার্ডে এটি সংরক্ষণ করা উচিত, সামগ্রী সরবরাহকারীর মাধ্যমে একটি আইডি নেওয়া উচিত, ঠিক আছে / বাতিল বোতামের সাথে ডায়ালগ বক্সে প্রদর্শন করুন।
জুম্বি

1
@ জেঞ্জেলসমা আমার ক্যামেরা ব্যবহার করে একটি সমস্যা আছে আমি চিত্রটি মোডে চিত্র ক্যাপচার করি এবং চিত্রের দৃশ্যে প্রদর্শন করি তবে এটি সর্বদা ল্যান্ডস্কেপ মোডে প্রদর্শিত হয় ha আপনি কি কোনও ধারণা রাখবেন? অন্যথায় আপনি এই ইস্যুটি স্ল্যাভ করতে পারেন।
জালা জানাকসিংহ

@ হর্ষ এমভি যদি উত্তর পেয়ে থাকে তবে আমাকে উত্তর দিন।
জালা জানাকসিংহ

এই ব্লগ আপনাকে সাহায্য করতে পারে। startandroidde

উত্তর:


473

এখানে একটি উদাহরণ ক্রিয়াকলাপ যা ক্যামেরা অ্যাপ্লিকেশন চালু করবে এবং তারপরে চিত্রটি পুনরুদ্ধার করবে এবং প্রদর্শন করবে।

package edu.gvsu.cis.masl.camerademo;

import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

public class MyCameraActivity extends Activity
{
    private static final int CAMERA_REQUEST = 1888; 
    private ImageView imageView;
    private static final int MY_CAMERA_PERMISSION_CODE = 100;

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        this.imageView = (ImageView)this.findViewById(R.id.imageView1);
        Button photoButton = (Button) this.findViewById(R.id.button1);
        photoButton.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                if (checkSelfPermission(Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED)
                {
                    requestPermissions(new String[]{Manifest.permission.CAMERA}, MY_CAMERA_PERMISSION_CODE);
                }
                else
                {
                    Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
                    startActivityForResult(cameraIntent, CAMERA_REQUEST);
                } 
            }
        });
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults)
    {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode == MY_CAMERA_PERMISSION_CODE)
        {
            if (grantResults[0] == PackageManager.PERMISSION_GRANTED)
            {
                Toast.makeText(this, "camera permission granted", Toast.LENGTH_LONG).show();
                Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
                startActivityForResult(cameraIntent, CAMERA_REQUEST);
            }
            else
            {
                Toast.makeText(this, "camera permission denied", Toast.LENGTH_LONG).show();
            }
        }
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data)
    {  
        if (requestCode == CAMERA_REQUEST && resultCode == Activity.RESULT_OK)
        {  
            Bitmap photo = (Bitmap) data.getExtras().get("data"); 
            imageView.setImageBitmap(photo);
        }  
    } 
}

নোট করুন যে ক্যামেরা অ্যাপটি নিজেই আপনাকে চিত্রটি পর্যালোচনা / পুনরায় নেওয়ার ক্ষমতা দেয় এবং একবার কোনও চিত্র গৃহীত হয়ে গেলে, ক্রিয়াকলাপটি এটি প্রদর্শন করে।

উপরের ক্রিয়াকলাপটি যে লেআউটটি ব্যবহার করে তা এখানে। এটি কেবল আইডি বাটন 1 সহ একটি বোতাম এবং আইডি চিত্র ভিউ 1 সহ একটি চিত্র ভিউ সমন্বিত একটি লিনিয়ারলআউট:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/photo"></Button>
    <ImageView android:id="@+id/imageView1" android:layout_height="wrap_content" android:src="@drawable/icon" android:layout_width="wrap_content"></ImageView>

</LinearLayout>

এবং একটি চূড়ান্ত বিশদ, যোগ করতে ভুলবেন না:

<uses-feature android:name="android.hardware.camera"></uses-feature> 

এবং যদি ক্যামেরাটি আপনার অ্যাপের কার্যকারিতার পক্ষে isচ্ছিক হয়। অনুমতিতে ভ্রান্ত প্রয়োজন সেট করতে নিশ্চিত করুন। এটার মত

<uses-feature android:name="android.hardware.camera" android:required="false"></uses-feature>

আপনার ম্যানিফেস্ট। এক্সএমএল।


18
বিটম্যাপ ফটো = (বিটম্যাপ) ডেটা.জেটএক্সট্রাস ()। পান ("ডেটা"); এটি একটি নাল পয়েন্টার এক্সপেকশন দেয়। আমি যখন অ্যাপটি খুলি এবং ক্যাপচার ক্লিক করি .. এটি ক্যামেরা অ্যাপে যায় এবং 2-4 সেকেন্ডের পরে পুরো জিনিসটি ক্র্যাশ হয়ে যায়।
হর্ষ এমভি

6
আমি মনে করি যে নিরাপদ পাশে থাকি আমাদের অনিয়েনসিটিস রেজাল্ট () পদ্ধতিতে রেজাল্ট কোড == ক্রিয়াকলাপ.আরআইসেলT_OK আছে কিনা তা পরীক্ষা করা উচিত। কেন ক্যামেরাটি ক্র্যাশ হচ্ছে, আমাদের একটি স্ট্যাক ট্রেস দেখতে হবে।
জেঞ্জেলসমা

6
@ হর্ষ এমভি এটি স্যামসাং গ্যালাক্সির একটি পরিচিত বাগ। দয়া করে এই উত্তরটি দেখুন স্ট্যাকওভারফ্লো.com
ওহ ড্যানি বয়

7
@WillKru যদি বৈশিষ্ট্য বাধ্যতামূলক নয়, আপনি যোগ করা উচিত <uses-feature/>সঙ্গে android:required="false"অ্যাট্রিবিউট:<uses-feature android:name="android.hardware.camera" android:required="false"></uses-feature>
whlk

122
এছাড়াও মনে রাখবেন যে তোলা Bitmap photo = (Bitmap) data.getExtras().get("data"); ছবিটি দখল করে না। এটি তোলা ইমেজের থাম্বনেল ধরে।
বিলি কুভার

44

আপডেট (2020)

Google একটি নতুন যোগ করেনি ActivityResultRegistryAPI যা "আপনি হ্যান্ডেল দেয় startActivityForResult()+ + onActivityResult()সেইসাথে requestPermissions()+ + onRequestPermissionsResult()আপনার কার্যকলাপ বা অসম্পূর্ণ অংশ পদ্ধতি অগ্রাহ্য ছাড়া প্রবাহিত মাধ্যমে বর্ধিত টাইপ নিরাপত্তা এনেছে ActivityResultContract, এবং প্রবাহিত এই পরীক্ষার জন্য আঙ্গুলসমূহ প্রদান করে" - উৎস

API এ যোগ করা হয়েছিল androidx.activity 1.2.0-alpha02 এবং androidx.fragment 1.3.0-alpha02

সুতরাং আপনি এখন যেমন কিছু করতে সক্ষম হন:

val takePicture = registerForActivityResult(ActivityResultContracts.TakePicture()) { success: Boolean ->
    if (success) {
        // The image was saved into the given Uri -> do something with it
    }
}

val imageUri: Uri = ...
button.setOnClickListener {
    takePicture.launch(imageUri)
}

নতুন ক্রিয়াকলাপের ফলাফল এপিআই কীভাবে ব্যবহার করতে হয় তা জানতে ডকুমেন্টেশনগুলি একবার দেখুন: https://developer.android.com/training/basics/intents/result#kotlin

অনেক বিল্ট-ইন অ্যাক্টিভিটিস রেজাল্ট কনট্রাক্টস রয়েছে যা আপনাকে বিভিন্ন জিনিস যেমন পিক পরিচিতি, অনুরোধের অনুমতি, ছবি তোলা বা ভিডিও তোলার অনুমতি দেয়। আপনি সম্ভবত উপরে দেখানো ক্রিয়াকলাপ সংক্রান্ত ফলাফলগুলি সম্পর্কে আগ্রহী ake

লক্ষ্য করুন androidx.fragment 1.3.0-alpha04 deprecates startActivityForResult()+ + onActivityResult()এবং requestPermissions()+ + onRequestPermissionsResult()অসম্পূর্ণ অংশ উপর API গুলি। সুতরাং মনে ActivityResultContractsহয় এটি এখন থেকে জিনিসগুলি করার নতুন উপায়।


আসল উত্তর (২০১৫)

এই কাজটি পেতে আমাকে কয়েক ঘন্টা সময় লেগেছে। এই কোডটি প্রায়শই একটি ছোট পার্থক্য সহ, বিকাশকারী.অ্যান্ড্রয়েড ডট কম থেকে একটি অনুলিপি-পেস্ট ।

এই অনুমতিটির জন্য এখানে অনুরোধ করুন AndroidManifest.xml:

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

আপনার Activity, এটি সংজ্ঞায়িত করে শুরু করুন:

static final int REQUEST_IMAGE_CAPTURE = 1;
private Bitmap mImageBitmap;
private String mCurrentPhotoPath;
private ImageView mImageView;

তারপরে Intentএটি একটি ফায়ার করুন onClick:

Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (cameraIntent.resolveActivity(getPackageManager()) != null) {
    // Create the File where the photo should go
    File photoFile = null;
    try {
        photoFile = createImageFile();
    } catch (IOException ex) {
        // Error occurred while creating the File
        Log.i(TAG, "IOException");
    }
    // Continue only if the File was successfully created
    if (photoFile != null) {
        cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photoFile));
        startActivityForResult(cameraIntent, REQUEST_IMAGE_CAPTURE);
    }
}

নিম্নলিখিত সমর্থন পদ্ধতি যুক্ত করুন:

private File createImageFile() throws IOException {
    // Create an image file name
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
    String imageFileName = "JPEG_" + timeStamp + "_";
    File storageDir = Environment.getExternalStoragePublicDirectory(
            Environment.DIRECTORY_PICTURES);
    File image = File.createTempFile(
            imageFileName,  // prefix
            ".jpg",         // suffix
            storageDir      // directory
    );

    // Save a file: path for use with ACTION_VIEW intents
    mCurrentPhotoPath = "file:" + image.getAbsolutePath();
    return image;
}

তারপরে ফলাফলটি গ্রহণ করুন:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
        try {
            mImageBitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), Uri.parse(mCurrentPhotoPath));
            mImageView.setImageBitmap(mImageBitmap);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

এটি কীভাবে কাজ করেছে তা হ'ল MediaStore.Images.Media.getBitmap(this.getContentResolver(), Uri.parse(mCurrentPhotoPath))যা ডেভেলপার.অ্যান্ড্রয়েড ডট কম থেকে কোডের চেয়ে আলাদা । মূল কোডটি আমাকে একটি দিয়েছে FileNotFoundException


"Uri.parse (mCurrentPhotoPath)" "মিডিয়াস্টোর থেকে সমাধান EXT
আমির ফাজওয়ান

1
আমার ছবিটি ল্যান্ডস্কেপ মোডে ডিফল্টরূপে আসছে, আমি কি কিছু মিস করছি?
অমিত গার্গ

1
এই কোডটি আমার পক্ষে কাজ করে নি। আমি গ্রহণ android.os.FileUriExposedException: file:///storage/emulated/0/Pictures/JPEG_20180823_102340_722874009725833047.jpg exposed beyond app through ClipData.Item.getUri()। এটি ঠিক করার জন্য কোনও ধারণা? @

1
@ অ্যালবার্টভিলা কলভো আমি এটি জানতাম না। সুতরাং, কীভাবে এটি ঠিক করবেন সে সম্পর্কে আপনার কোনও ধারণা আছে? আমি কি পরিবর্তন করতে পারি জানি না। আমি আশা করি আপনি আমাকে সাহায্য করতে পারেন, ধন্যবাদ।

1
আমাকে storageDir = Context.getFilesDir();ফাইলের জায়গায় ব্যবহার করতে হয়েছিল storageDir = Environment.getExternalStoragePublicDirectory( Environment.DIRECTORY_PICTURES);। অন্যথায় আমি একটি অনুমতি অস্বীকার ত্রুটি পেয়ে যাচ্ছিলাম।
কোয়েস্ট

19

ফটো ক্যাপচার করুন + গ্যালারী থেকে চয়ন করুন:

        a = (ImageButton)findViewById(R.id.imageButton1);

        a.setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View v) {

                selectImage();

            }

        });
    }
    private File savebitmap(Bitmap bmp) {
      String extStorageDirectory = Environment.getExternalStorageDirectory().toString();
      OutputStream outStream = null;
     // String temp = null;
        File file = new File(extStorageDirectory, "temp.png");
      if (file.exists()) {
       file.delete();
       file = new File(extStorageDirectory, "temp.png");

      }

      try {
       outStream = new FileOutputStream(file);
       bmp.compress(Bitmap.CompressFormat.PNG, 100, outStream);
       outStream.flush();
       outStream.close();

      } catch (Exception e) {
       e.printStackTrace();
       return null;
      }
      return file;
     }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
     private void selectImage() {



            final CharSequence[] options = { "Take Photo", "Choose from Gallery","Cancel" };



            AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);

            builder.setTitle("Add Photo!");

            builder.setItems(options, new DialogInterface.OnClickListener() {

                @Override

                public void onClick(DialogInterface dialog, int item) {

                    if (options[item].equals("Take Photo"))

                    {

                        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

                        File f = new File(android.os.Environment.getExternalStorageDirectory(), "temp.jpg");

                        intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(f));
                        //pic = f;

                        startActivityForResult(intent, 1);


                    }

                    else if (options[item].equals("Choose from Gallery"))

                    {

                        Intent intent = new   Intent(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);

                        startActivityForResult(intent, 2);



                    }

                    else if (options[item].equals("Cancel")) {

                        dialog.dismiss();

                    }

                }

            });

            builder.show();

        }



        @Override

        protected void onActivityResult(int requestCode, int resultCode, Intent data) {

            super.onActivityResult(requestCode, resultCode, data);

            if (resultCode == RESULT_OK) {

                if (requestCode == 1) {
                    //h=0;
                    File f = new File(Environment.getExternalStorageDirectory().toString());

                    for (File temp : f.listFiles()) {

                        if (temp.getName().equals("temp.jpg")) {

                            f = temp;
                            File photo = new File(Environment.getExternalStorageDirectory(), "temp.jpg");
                           //pic = photo;
                            break;

                        }

                    }

                    try {

                        Bitmap bitmap;

                        BitmapFactory.Options bitmapOptions = new BitmapFactory.Options();



                        bitmap = BitmapFactory.decodeFile(f.getAbsolutePath(),

                                bitmapOptions); 



                        a.setImageBitmap(bitmap);




                        String path = android.os.Environment

                                .getExternalStorageDirectory()

                                + File.separator

                                + "Phoenix" + File.separator + "default";
                        //p = path;

                        f.delete();

                        OutputStream outFile = null;

                        File file = new File(path, String.valueOf(System.currentTimeMillis()) + ".jpg");

                        try {

                            outFile = new FileOutputStream(file);

                            bitmap.compress(Bitmap.CompressFormat.JPEG, 85, outFile);
    //pic=file;
                            outFile.flush();

                            outFile.close();


                        } catch (FileNotFoundException e) {

                            e.printStackTrace();

                        } catch (IOException e) {

                            e.printStackTrace();

                        } catch (Exception e) {

                            e.printStackTrace();

                        }

                    } catch (Exception e) {

                        e.printStackTrace();

                    }

                } else if (requestCode == 2) {



                    Uri selectedImage = data.getData();
                   // h=1;
    //imgui = selectedImage;
                    String[] filePath = { MediaStore.Images.Media.DATA };

                    Cursor c = getContentResolver().query(selectedImage,filePath, null, null, null);

                    c.moveToFirst();

                    int columnIndex = c.getColumnIndex(filePath[0]);

                    String picturePath = c.getString(columnIndex);

                    c.close();

                    Bitmap thumbnail = (BitmapFactory.decodeFile(picturePath));


                    Log.w("path of image from gallery......******************.........", picturePath+"");


                    a.setImageBitmap(thumbnail);

                }

            }

ResultCode == 1ভিতরে ResultCode == RESULT_OK?
শ্রুজান বড়াই

এটি requestCode==1, কে অনুরোধটি শুরু করেছিল তা সনাক্ত করতে সহায়তা করে।
ইরশু

18

আমি জানি এটি বেশ পুরানো থ্রেড, তবে এই সমস্ত সমাধানগুলি সম্পন্ন হয় না এবং যখন ব্যবহারকারী ক্যামেরা ঘোরান তখন কোনও ডিভাইসে কাজ করবেন না কারণঅ্যাক্টিভিটিআরসাল্টের ডেটা নাল। সুতরাং এখানে সমাধানটি আমি প্রচুর ডিভাইসে পরীক্ষা করে দেখেছি এবং এখনও পর্যন্ত কোনও সমস্যার মুখোমুখি হইনি।

প্রথমে আপনার ক্রিয়াকলাপে আপনার উরি পরিবর্তনশীল ঘোষণা করুন:

private Uri uriFilePath;

তারপরে ক্যাপচার করা চিত্র সংরক্ষণের জন্য আপনার অস্থায়ী ফোল্ডারটি তৈরি করুন এবং ক্যামেরা দ্বারা চিত্র ক্যাপচারের উদ্দেশ্যে তৈরি করুন:

PackageManager packageManager = getActivity().getPackageManager();
if (packageManager.hasSystemFeature(PackageManager.FEATURE_CAMERA)) {
    File mainDirectory = new File(Environment.getExternalStorageDirectory(), "MyFolder/tmp");
         if (!mainDirectory.exists())
             mainDirectory.mkdirs();

          Calendar calendar = Calendar.getInstance();

          uriFilePath = Uri.fromFile(new File(mainDirectory, "IMG_" + calendar.getTimeInMillis()));
          intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
          intent.putExtra(MediaStore.EXTRA_OUTPUT, uriFilePath);
          startActivityForResult(intent, 1);
}

এবং এখন এখানে সর্বাধিক গুরুত্বপূর্ণ বিষয়গুলির মধ্যে একটি আসবে, আপনাকে নিজের uriFilePath onSaveInstanceState এ সংরক্ষণ করতে হবে, কারণ আপনি যদি তা না করেন এবং ব্যবহারকারী ক্যামেরা ব্যবহার করার সময় তার ডিভাইসটি ঘোরান, আপনার ইউরি নাল হবে।

@Override
protected void onSaveInstanceState(Bundle outState) {
     if (uriFilePath != null)
         outState.putString("uri_file_path", uriFilePath.toString());
     super.onSaveInstanceState(outState);
}

এর পরে আপনার অনিক্রিট পদ্ধতিতে আপনার ইউরি সবসময় পুনরুদ্ধার করা উচিত:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (savedInstanceState != null) {
         if (uriFilePath == null && savedInstanceState.getString("uri_file_path") != null) {
             uriFilePath = Uri.parse(savedInstanceState.getString("uri_file_path"));
         }
    } 
}

অ্যাক্টিভিটিস রেজাল্টে আপনার উরি পেতে এখানে শেষ অংশটি আসে:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {    
    if (resultCode == RESULT_OK) {
         if (requestCode == 1) {
            String filePath = uriFilePath.getPath(); // Here is path of your captured image, so you can create bitmap from it, etc.
         }
    }
 }

পিএস ক্যামেরা এবং অতিরিক্তের জন্য অনুমতিগুলি যুক্ত করতে ভুলবেন না। আপনার ম্যানিফেস্টে স্টোরেজ লিখন।


আমি ফ্র্যাগমেন্টডায়ালগ নিয়ে কাজ করছি। আমি যেমনটি করেছি তেমন করার চেষ্টা করেছি .. আমি উরি ঘোষণা করলাম, তারপরে একটি পদ্ধতিতে "storeCapturedImage" - আমি প্যাকেজম্যানেজার কোডটি রেখেছি, তারপরে আমি onSaveInstanceState () - এ সমস্ত যুক্ত করেছিলাম Cআরক্রিটের আগে। তারপরে অনক্রিটডায়ালগে আমি 'আপনার ইউরি পুনরুদ্ধার' কোডটি রেখেছি এবং তারপরে অ্যাক্টিভিটি রেজাল্টটি ওনক্রিট পদ্ধতিটির ঠিক উপরে রাখা হয়েছিল ... 'আপনার ইউরি পুনরুদ্ধার করুন'
কোডটির

AlertDialog.Builder builder = new AlertDialog.Builder (getActivity ()); LayoutInflater inflater = getActivity ()। GetLayoutInflater (); কথোপকথন দেখুন = inflater.inflate (R.layout.username_dialog, নাল); ইমেজভিউ প্রোফাইলপিক = ডায়ালগভিউ.ফাইন্ডভিউবিআইআইডি (আর.আইডি.প্রোফাইল_পিক); profilePic.setImageResource (R.drawable.user_placeholder); প্রোফাইলপিক.সেটঅনক্লিকলিস্টনার (নতুন ভিউ.অনক্লিকলিস্টার () {@ ওভাররাইড পাবলিক শূন্য অনক্লিক (ভিউ দেখুন) {স্টোরক্যাপচারড আইমেজ ();}}); builder.setView (dialogView);
LizG

1
আমি সত্যিই আশ্চর্য হয়েছি কেন ওএস আপনাকে অনঅ্যাক্টিভিটিআরসাল্টের অভ্যন্তরে ইউরি প্রেরণ করে না। আমি আশা করি এর একটি ভাল কারণ আছে, কারণ রাষ্ট্রের চারদিকে বয়ে যাওয়া আইএমও করা সর্বদা ভাল জিনিস নয়।
ওয়েইন উরোদা

তাহলে অ্যাক্টিভিটিআরসাল্ট কলব্যাকে ডেটা ব্যবহার কী?
ইওকস

10

এখানে আপনি ক্যামেরা বা গ্যালারী খুলতে এবং নির্বাচিত চিত্রটিকে চিত্রদর্শন হিসাবে সেট করতে পারেন

private static final String IMAGE_DIRECTORY = "/YourDirectName";
private Context mContext;
private CircleImageView circleImageView;  // imageview
private int GALLERY = 1, CAMERA = 2;

ম্যানিফেস্টে অনুমতি যুক্ত করুন

<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="ANDROID.PERMISSION.READ_EXTERNAL_STORAGE" />

অনক্রিটে ()

    requestMultiplePermissions(); // check permission 

    circleImageView = findViewById(R.id.profile_image);
    circleImageView.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            showPictureDialog();
        }
    });

বিকল্প ডায়ালগ বক্স দেখান (ক্যামেরা বা গ্যালারী থেকে চিত্র নির্বাচন করতে)

private void showPictureDialog() {
    AlertDialog.Builder pictureDialog = new AlertDialog.Builder(this);
    pictureDialog.setTitle("Select Action");
    String[] pictureDialogItems = {"Select photo from gallery", "Capture photo from camera"};
    pictureDialog.setItems(pictureDialogItems,
            new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    switch (which) {
                        case 0:
                            choosePhotoFromGallary();
                            break;
                        case 1:
                            takePhotoFromCamera();
                            break;
                    }
                }
            });
    pictureDialog.show();
}

গ্যালারী থেকে ফটো পেতে

public void choosePhotoFromGallary() {
    Intent galleryIntent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
    startActivityForResult(galleryIntent, GALLERY);
}

ক্যামেরা থেকে ফটো পেতে

private void takePhotoFromCamera() {
    Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
    startActivityForResult(intent, CAMERA);
}

ছবিটি একবার নির্বাচিত বা ক্যাপচার হয়ে গেলে,

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {

    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == this.RESULT_CANCELED) {
        return;
    }
    if (requestCode == GALLERY) {
        if (data != null) {
            Uri contentURI = data.getData();
            try {
                Bitmap bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), contentURI);
                String path = saveImage(bitmap);
                Toast.makeText(getApplicationContext(), "Image Saved!", Toast.LENGTH_SHORT).show();
                circleImageView.setImageBitmap(bitmap);

            } catch (IOException e) {
                e.printStackTrace();
                Toast.makeText(getApplicationContext(), "Failed!", Toast.LENGTH_SHORT).show();
            }
        }

    } else if (requestCode == CAMERA) {
        Bitmap thumbnail = (Bitmap) data.getExtras().get("data");
        circleImageView.setImageBitmap(thumbnail);
        saveImage(thumbnail);
        Toast.makeText(getApplicationContext(), "Image Saved!", Toast.LENGTH_SHORT).show();
    }
}

এখন সময় এসেছে ছবিটি সংরক্ষণ করার

public String saveImage(Bitmap myBitmap) {
    ByteArrayOutputStream bytes = new ByteArrayOutputStream();
    myBitmap.compress(Bitmap.CompressFormat.JPEG, 90, bytes);
    File wallpaperDirectory = new File(Environment.getExternalStorageDirectory() + IMAGE_DIRECTORY);
    if (!wallpaperDirectory.exists()) {  // have the object build the directory structure, if needed.
        wallpaperDirectory.mkdirs();
    }

    try {
        File f = new File(wallpaperDirectory, Calendar.getInstance().getTimeInMillis() + ".jpg");
        f.createNewFile();
        FileOutputStream fo = new FileOutputStream(f);
        fo.write(bytes.toByteArray());
        MediaScannerConnection.scanFile(this,
                new String[]{f.getPath()},
                new String[]{"image/jpeg"}, null);
        fo.close();
        Log.d("TAG", "File Saved::---&gt;" + f.getAbsolutePath());

        return f.getAbsolutePath();
    } catch (IOException e1) {
        e1.printStackTrace();
    }
    return "";
}

অনুমতির অনুরোধ

    private void requestMultiplePermissions() {
    Dexter.withActivity(this)
            .withPermissions(
                    Manifest.permission.CAMERA,
                    Manifest.permission.WRITE_EXTERNAL_STORAGE,
                    Manifest.permission.READ_EXTERNAL_STORAGE)
            .withListener(new MultiplePermissionsListener() {
                @Override
                public void onPermissionsChecked(MultiplePermissionsReport report) {
                    if (report.areAllPermissionsGranted()) {  // check if all permissions are granted
                        Toast.makeText(getApplicationContext(), "All permissions are granted by user!", Toast.LENGTH_SHORT).show();
                    }

                    if (report.isAnyPermissionPermanentlyDenied()) { // check for permanent denial of any permission
                        // show alert dialog navigating to Settings
                        //openSettingsDialog();
                    }
                }

                @Override
                public void onPermissionRationaleShouldBeShown(List<PermissionRequest> permissions, PermissionToken token) {
                    token.continuePermissionRequest();
                }
            }).
            withErrorListener(new PermissionRequestErrorListener() {
                @Override
                public void onError(DexterError error) {
                    Toast.makeText(getApplicationContext(), "Some Error! ", Toast.LENGTH_SHORT).show();
                }
            })
            .onSameThread()
            .check();
}

9

আপনার ক্যামেরা সম্পর্কে পড়তে হবে । (আপনি যা চান তা করার জন্য আমি মনে করি, আপনার বর্তমান চিত্রটি আপনার অ্যাপ্লিকেশনটিতে সংরক্ষণ করতে হবে, সেখানে নির্বাচন / মুছুন নির্বাচন করুন এবং তারপরে সরাসরি ক্যামেরার ভিতরে আবার চেষ্টা করার চেয়ে ক্যামেরাটি আবার চেষ্টা করতে হবে all


8

আমি ক্যামেরা চিত্র ক্যাপচারিং এবং সেভিংয়ের জন্য ব্যবহৃত কোডটি এটির পরে এটি চিত্রের দৃশ্যে প্রদর্শিত হবে। আপনি আপনার প্রয়োজন অনুযায়ী ব্যবহার করতে পারেন।

আপনাকে ক্যামেরা চিত্রটি নির্দিষ্ট স্থানে সংরক্ষণ করতে হবে এবং সেই অবস্থান থেকে আনতে হবে এবং এটিকে বাইট-অ্যারেতে রূপান্তর করতে হবে।

ক্যামেরা চিত্রের ক্রিয়াকলাপ খোলার জন্য এখানে পদ্ধতি।

private static final int CAMERA_PHOTO = 111;
private Uri imageToUploadUri;

private void captureCameraImage() {
        Intent chooserIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        File f = new File(Environment.getExternalStorageDirectory(), "POST_IMAGE.jpg");
        chooserIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(f));
        imageToUploadUri = Uri.fromFile(f);
        startActivityForResult(chooserIntent, CAMERA_PHOTO);
    }

তাহলে আপনার onCtivityResult () পদ্ধতিটি এর মতো হওয়া উচিত।

@Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);

            if (requestCode == CAMERA_PHOTO && resultCode == Activity.RESULT_OK) {
                if(imageToUploadUri != null){
                    Uri selectedImage = imageToUploadUri;
                    getContentResolver().notifyChange(selectedImage, null);
                    Bitmap reducedSizeBitmap = getBitmap(imageToUploadUri.getPath());
                    if(reducedSizeBitmap != null){
                        ImgPhoto.setImageBitmap(reducedSizeBitmap);
                        Button uploadImageButton = (Button) findViewById(R.id.uploadUserImageButton);
                          uploadImageButton.setVisibility(View.VISIBLE);                
                    }else{
                        Toast.makeText(this,"Error while capturing Image",Toast.LENGTH_LONG).show();
                    }
                }else{
                    Toast.makeText(this,"Error while capturing Image",Toast.LENGTH_LONG).show();
                }
            } 
        }

এখানেঅ্যাক্টিভিটিস রেজাল্ট ()-এ ব্যবহৃত বিটম্যাপ () পদ্ধতিটি রয়েছে। আমি ক্যামেরা ক্যাপচার ইমেজ বিটম্যাপ পাওয়ার সময় সমস্ত পারফরম্যান্স উন্নতি করেছি।

private Bitmap getBitmap(String path) {

        Uri uri = Uri.fromFile(new File(path));
        InputStream in = null;
        try {
            final int IMAGE_MAX_SIZE = 1200000; // 1.2MP
            in = getContentResolver().openInputStream(uri);

            // Decode image size
            BitmapFactory.Options o = new BitmapFactory.Options();
            o.inJustDecodeBounds = true;
            BitmapFactory.decodeStream(in, null, o);
            in.close();


            int scale = 1;
            while ((o.outWidth * o.outHeight) * (1 / Math.pow(scale, 2)) >
                    IMAGE_MAX_SIZE) {
                scale++;
            }
            Log.d("", "scale = " + scale + ", orig-width: " + o.outWidth + ", orig-height: " + o.outHeight);

            Bitmap b = null;
            in = getContentResolver().openInputStream(uri);
            if (scale > 1) {
                scale--;
                // scale to max possible inSampleSize that still yields an image
                // larger than target
                o = new BitmapFactory.Options();
                o.inSampleSize = scale;
                b = BitmapFactory.decodeStream(in, null, o);

                // resize to desired dimensions
                int height = b.getHeight();
                int width = b.getWidth();
                Log.d("", "1th scale operation dimenions - width: " + width + ", height: " + height);

                double y = Math.sqrt(IMAGE_MAX_SIZE
                        / (((double) width) / height));
                double x = (y / height) * width;

                Bitmap scaledBitmap = Bitmap.createScaledBitmap(b, (int) x,
                        (int) y, true);
                b.recycle();
                b = scaledBitmap;

                System.gc();
            } else {
                b = BitmapFactory.decodeStream(in);
            }
            in.close();

            Log.d("", "bitmap size - width: " + b.getWidth() + ", height: " +
                    b.getHeight());
            return b;
        } catch (IOException e) {
            Log.e("", e.getMessage(), e);
            return null;
        }
    }

আশা করি এটা সাহায্য করবে!


আমি এটি চেষ্টা করেছি এবং অনিক্লিকলাইস্টার থেকে অনক্লিকটিতে ক্যাপচার আইমেজ () রেখেছি এবং কাজ করছি না। আমি ফ্র্যাগমেন্টডায়ালগ নিয়ে কাজ করছি ... কোন ধারণা?
LizG

6

গ্যালারী থেকে ক্যামেরা + পিক চিত্র থেকে ফটো ক্যাপচার করুন এবং এটিকে বিন্যাস বা চিত্রের দৃশ্যের পটভূমিতে সেট করুন। এখানে নমুনা কোড।

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;

    import android.provider.MediaStore;
    import android.util.Log;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.AdapterView;
    import android.widget.AdapterView.OnItemClickListener;
    import android.widget.GridView;
    import android.widget.ImageView;
    import android.widget.LinearLayout;

    public class Post_activity extends Activity
    {
        final int TAKE_PICTURE = 1;
        final int ACTIVITY_SELECT_IMAGE = 2;

        ImageView openCameraOrGalleryBtn,cancelBtn;
        LinearLayout backGroundImageLinearLayout;

        public void onCreate(Bundle savedBundleInstance) {
            super.onCreate(savedBundleInstance);
            overridePendingTransition(R.anim.slide_up,0);
            setContentView(R.layout.post_activity);

            backGroundImageLinearLayout=(LinearLayout)findViewById(R.id.background_image_linear_layout);
            cancelBtn=(ImageView)findViewById(R.id.cancel_icon);

            openCameraOrGalleryBtn=(ImageView)findViewById(R.id.camera_icon);



            openCameraOrGalleryBtn.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub

                    selectImage();
                }
            });
            cancelBtn.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                overridePendingTransition(R.anim.slide_down,0);
                finish();
                }
            });

        }

    public void selectImage()
        {
             final CharSequence[] options = { "Take Photo", "Choose from Gallery","Cancel" };
             AlertDialog.Builder builder = new AlertDialog.Builder(Post_activity.this);
                builder.setTitle("Add Photo!");
                builder.setItems(options,new DialogInterface.OnClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        // TODO Auto-generated method stub
                        if(options[which].equals("Take Photo"))
                        {
                            Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
                            startActivityForResult(cameraIntent, TAKE_PICTURE);
                        }
                        else if(options[which].equals("Choose from Gallery"))
                        {
                            Intent intent=new Intent(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
                            startActivityForResult(intent, ACTIVITY_SELECT_IMAGE);
                        }
                        else if(options[which].equals("Cancel"))
                        {
                            dialog.dismiss();
                        }

                    }
                });
                builder.show();
        }
        public void onActivityResult(int requestcode,int resultcode,Intent intent)
        {
            super.onActivityResult(requestcode, resultcode, intent);
            if(resultcode==RESULT_OK)
            {
                if(requestcode==TAKE_PICTURE)
                {
                    Bitmap photo = (Bitmap)intent.getExtras().get("data"); 
                    Drawable drawable=new BitmapDrawable(photo);
                    backGroundImageLinearLayout.setBackgroundDrawable(drawable);

                }
                else if(requestcode==ACTIVITY_SELECT_IMAGE)
                {
                    Uri selectedImage = intent.getData();
                    String[] filePath = { MediaStore.Images.Media.DATA };
                    Cursor c = getContentResolver().query(selectedImage,filePath, null, null, null);
                    c.moveToFirst();
                    int columnIndex = c.getColumnIndex(filePath[0]);
                    String picturePath = c.getString(columnIndex);
                    c.close();
                    Bitmap thumbnail = (BitmapFactory.decodeFile(picturePath));
                    Drawable drawable=new BitmapDrawable(thumbnail);
                    backGroundImageLinearLayout.setBackgroundDrawable(drawable);


                }
            }
        }

        public void onBackPressed() {
            super.onBackPressed();
            //overridePendingTransition(R.anim.slide_down,0);
        }
    }

Add these permission in Androidmenifest.xml file

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

এটি বেশ পুরানো তবে আপনি যেভাবে করেছেন এটি আমার পছন্দ। আমি যখন গ্যালারী থেকে চয়ন করি তবে চিত্রটি প্রদর্শন করতে ব্যর্থ। কোন চিন্তা?
রাফভাস্ক

4

ক্রিয়াকলাপে:

@Override
    protected void onCreate(Bundle savedInstanceState) {
                 image = (ImageView) findViewById(R.id.imageButton);
        image.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                try {
                SimpleDateFormat sdfPic = new SimpleDateFormat(DATE_FORMAT);
                currentDateandTime = sdfPic.format(new Date()).replace(" ", "");
                File imagesFolder = new File(IMAGE_PATH, currentDateandTime);
                imagesFolder.mkdirs();
                Random generator = new Random();
                int n = 10000;
                n = generator.nextInt(n);
                String fname = IMAGE_NAME + n + IMAGE_FORMAT;
                File file = new File(imagesFolder, fname);
                outputFileUri = Uri.fromFile(file);
                cameraIntent= new Intent(
                        android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
                cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
                                startActivityForResult(cameraIntent, CAMERA_DATA);
                }catch(Exception e) {
                    e.printStackTrace();
                }

            }
        });
           @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        switch(requestCode) {
        case CAMERA_DATA :
                final int IMAGE_MAX_SIZE = 300;
                try {
                    // Bitmap bitmap;
                    File file = null;
                    FileInputStream fis;
                    BitmapFactory.Options opts;
                    int resizeScale;
                    Bitmap bmp;
                    file = new File(outputFileUri.getPath());
                    // This bit determines only the width/height of the
                    // bitmap
                    // without loading the contents
                    opts = new BitmapFactory.Options();
                    opts.inJustDecodeBounds = true;
                    fis = new FileInputStream(file);
                    BitmapFactory.decodeStream(fis, null, opts);
                    fis.close();

                    // Find the correct scale value. It should be a power of
                    // 2
                    resizeScale = 1;

                    if (opts.outHeight > IMAGE_MAX_SIZE
                            || opts.outWidth > IMAGE_MAX_SIZE) {
                        resizeScale = (int) Math.pow(2, (int) Math.round(Math.log(IMAGE_MAX_SIZE/ (double) Math.max(opts.outHeight, opts.outWidth)) / Math.log(0.5)));
                    }

                    // Load pre-scaled bitmap
                    opts = new BitmapFactory.Options();
                    opts.inSampleSize = resizeScale;
                    fis = new FileInputStream(file);
                    bmp = BitmapFactory.decodeStream(fis, null, opts);
                    Bitmap getBitmapSize = BitmapFactory.decodeResource(
                            getResources(), R.drawable.male);
                    image.setLayoutParams(new RelativeLayout.LayoutParams(
                            200,200));//(width,height);
                    image.setImageBitmap(bmp);
                    image.setRotation(90);
                    fis.close();

                    ByteArrayOutputStream baos = new ByteArrayOutputStream();
                    bmp.compress(Bitmap.CompressFormat.JPEG, 70, baos);
                    imageByte = baos.toByteArray();
                    break;
                } catch (FileNotFoundException e) {

                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }

লেআউট.এক্সএমএল:

enter code here
<RelativeLayout
        android:id="@+id/relativeLayout2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">


        <ImageView
            android:id="@+id/imageButton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"

                            android:src="@drawable/XXXXXXX"
            android:textAppearance="?android:attr/textAppearanceSmall" />

ম্যানিফেস্ট.এক্সএমএল:

    <uses-permission android:name="android.permission.CAMERA" />   <uses-feature android:name="android.hardware.camera" />


3

আপনি থাম্বনেইল চিত্র সহ কাস্টম ক্যামেরা ব্যবহার করতে পারেন। আপনি আমার প্রকল্প দেখতে পারেন ।


3

আমি গ্যালারী বা ক্যামেরা থেকে চিত্র চয়ন করার বিকল্পটি দিয়ে একটি ডায়ালগ তৈরি করেছি। হিসাবে একটি কলব্যাক সঙ্গে

  • ছবিটি গ্যালারী থেকে থাকলে উরি
  • চিত্রটি ক্যামেরা থেকে ক্যাপচার করা হলে একটি ফাইল পাথ হিসাবে স্ট্রিং।
  • ফাইল হিসাবে চিত্র ক্যামেরা থেকে চয়ন করা চিত্রটি ইন্টারনেটে মাল্টিপার্ট ফাইল ডেটা হিসাবে আপলোড করা দরকার

প্রথমে আমরা অ্যান্ড্রয়েড ম্যানিফেস্টে অনুমতিটি সংজ্ঞায়িত করতে পারি কারণ একটি ফাইল তৈরি করার সময় এবং গ্যালারী থেকে চিত্রগুলি পড়ার সময় আমাদের বাহ্যিক স্টোর লিখতে হবে

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

অ্যাপ্লিকেশন / এসসিআর / প্রধান / রেজো / এক্সএমএল / ফাইল_প্যাথস.এক্সএমএল এ একটি ফাইল_পথ এক্সএমএল তৈরি করুন

পথ সহ

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <external-path name="external_files" path="."/>
</paths>

তারপরে বাহ্যিক স্টোরেজে সঞ্চিত ফাইলে অ্যাক্সেসের জন্য সামগ্রী ইউরি তৈরি করতে আমাদের ফাইল সরবরাহকারী সংজ্ঞায়িত করতে হবে

<provider
    android:name="androidx.core.content.FileProvider"
    android:authorities="${applicationId}.provider"
    android:exported="false"
    android:grantUriPermissions="true">
    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/file_paths" />
</provider>

ডেইলগ লেআউট

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <androidx.constraintlayout.widget.Guideline
        android:id="@+id/guideline2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        app:layout_constraintGuide_percent="0.50" />

    <ImageView
        android:id="@+id/gallery"
        android:layout_width="48dp"
        android:layout_height="48dp"
        android:layout_marginStart="8dp"
        android:layout_marginTop="32dp"
        android:layout_marginEnd="8dp"
        android:layout_marginBottom="32dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="@+id/guideline2"
        app:layout_constraintTop_toTopOf="parent"
        app:srcCompat="@drawable/ic_menu_gallery" />

    <ImageView
        android:id="@+id/camera"
        android:layout_width="48dp"
        android:layout_height="0dp"
        android:layout_marginStart="8dp"
        android:layout_marginTop="32dp"
        android:layout_marginEnd="8dp"
        android:layout_marginBottom="32dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toStartOf="@+id/guideline2"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:srcCompat="@drawable/ic_menu_camera" />
</androidx.constraintlayout.widget.ConstraintLayout>

ইমেজপিকার দাইলোগ

public class ImagePicker extends BottomSheetDialogFragment {
ImagePicker.GetImage getImage;
publ` enter code here` ic ImagePicker(ImagePicker.GetImage getImage, boolean allowMultiple) {
    this.getImage = getImage;
}
File cameraImage;@
Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.bottom_sheet_imagepicker, container, false);
    view.findViewById(R.id.camera).setOnClickListener(new View.OnClickListener() {@
        Override
        public void onClick(View view) {
            if(ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
                requestPermissions(new String[] {
                    Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE
                }, 2000);
            } else {
                captureFromCamera();
            }
        }
    });
    view.findViewById(R.id.gallery).setOnClickListener(new View.OnClickListener() {@
        Override
        public void onClick(View view) {
            if(ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
                requestPermissions(new String[] {
                    Manifest.permission.READ_EXTERNAL_STORAGE
                }, 2000);
            } else {
                startGallery();
            }
        }
    });
    return view;
}
public interface GetImage {
    void setGalleryImage(Uri imageUri);
    void setCameraImage(String filePath);
    void setImageFile(File file);
}@
Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if(resultCode == Activity.RESULT_OK) {
        if(requestCode == 1000) {
            Uri returnUri = data.getData();
            getImage.setGalleryImage(returnUri);
            Bitmap bitmapImage = null;
        }
        if(requestCode == 1002) {
            if(cameraImage != null) {
                getImage.setImageFile(cameraImage);
            }
            getImage.setCameraImage(cameraFilePath);
        }
    }
}
private void startGallery() {
    Intent cameraIntent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
    cameraIntent.setType("image/*");
    if(cameraIntent.resolveActivity(getActivity().getPackageManager()) != null) {
        startActivityForResult(cameraIntent, 1000);
    }
}
private String cameraFilePath;
private File createImageFile() throws IOException {
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
    String imageFileName = "JPEG_" + timeStamp + "_";
    File storageDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM), "Camera");
    File image = File.createTempFile(imageFileName, /* prefix */ ".jpg", /* suffix */ storageDir /* directory */ );
    cameraFilePath = "file://" + image.getAbsolutePath();
    cameraImage = image;
    return image;
}
private void captureFromCamera() {
    try {
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        intent.putExtra(MediaStore.EXTRA_OUTPUT, FileProvider.getUriForFile(getContext(), BuildConfig.APPLICATION_ID + ".provider", createImageFile()));
        startActivityForResult(intent, 1002);
    } catch(IOException ex) {
        ex.printStackTrace();
    }
}

}

ক্রিয়াকলাপে কল করুন বা খণ্ডন / ক্রিয়াকলাপের মতো এই অংশটির মতো খণ্ডন করুন P

ImagePicker imagePicker;

তারপরে বোতামের ক্লিকের উপর কল করুন ডায়লগ

      imagePicker = new ImagePicker(new ImagePicker.GetImage() {
            @Override
            public void setGalleryImage(Uri imageUri) {

                Log.i("ImageURI", imageUri + "");

                String[] filePathColumn = {MediaStore.Images.Media.DATA};

                Cursor cursor = getContext().getContentResolver().query(imageUri, filePathColumn, null, null, null);
                assert cursor != null;
                cursor.moveToFirst();

                int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
                mediaPath = cursor.getString(columnIndex);
                // Set the Image in ImageView for Previewing the Media
                imagePreview.setImageBitmap(BitmapFactory.decodeFile(mediaPath));
                cursor.close();

            }

            @Override
            public void setCameraImage(String filePath) {

                mediaPath =filePath;
                Glide.with(getContext()).load(filePath).into(imagePreview);

            }

            @Override
            public void setImageFile(File file) {

                cameraImage = file;

            }
        }, true);
        imagePicker.show(getActivity().getSupportFragmentManager(), imagePicker.getTag());

2

এখানে সম্পূর্ণ কোড:

package com.example.cameraa;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

public class MainActivity extends Activity {




        Button btnTackPic;
        Uri photoPath;
        ImageView ivThumbnailPhoto;

        static int TAKE_PICTURE = 1;

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

            // Get reference to views

            btnTackPic = (Button) findViewById(R.id.bt1);
            ivThumbnailPhoto = (ImageView) findViewById(R.id.imageView1);




     btnTackPic.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub


                Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
                startActivityForResult(cameraIntent, TAKE_PICTURE); 
            }




    });

        } 

        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent intent) {


                if (requestCode == TAKE_PICTURE && resultCode == RESULT_OK) {  
                    Bitmap photo = (Bitmap)intent.getExtras().get("data"); 
                   ivThumbnailPhoto.setImageBitmap(photo);
                ivThumbnailPhoto.setVisibility(View.VISIBLE);



            }
        }
}

ক্যামেরার জন্যও অনুমতি যুক্ত করতে ভুলবেন না।


2

আপনি ক্লিক করে শ্রোতাদের অন ক্লিক করতে এই কোডটি ব্যবহার করতে পারেন (আপনি ইমেজভিউ বা বোতাম ব্যবহার করতে পারেন)

image.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
                startActivityForResult(takePictureIntent, 1);
            }
        }
    });

আপনার ইমেজভিউতে প্রদর্শন করতে

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
        Bundle extras = data.getExtras();
        bitmap = (Bitmap) extras.get("data");
        image.setImageBitmap(bitmap);

    }
}

দ্রষ্টব্য: ম্যানিফেস্টে এটি sertোকান

<uses-feature android:name="android.hardware.camera" android:required="true" />

1

আপনার মোবাইল ক্যামেরা ব্যবহার করে ছবি ক্যাপচার করতে নিম্নলিখিত কোডটি ব্যবহার করুন। আপনি যদি ললিপপের চেয়ে উচ্চতর সংস্করণ অ্যান্ড্রয়েড ব্যবহার করছেন তবে আপনার অনুমতি অনুরোধটিও যুক্ত করা উচিত।

private void cameraIntent()
    {
          Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
          startActivityForResult(intent, REQUEST_CAMERA);
    }

@override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
     if (requestCode == CAMERA_REQUEST && resultCode == Activity.RESULT_OK) {  
            Bitmap photo = (Bitmap) data.getExtras().get("data"); 
            imageView.setImageBitmap(photo);
     }  
} 

1

Bitmap photo = (Bitmap) data.getExtras().get("data");ক্যামেরা থেকে একটি থাম্বনেইল পায়। ক্যামেরা থেকে বাইরের স্টোরেজে কোনও ছবি কীভাবে সংরক্ষণ করা যায় সে সম্পর্কে একটি নিবন্ধ রয়েছে। দরকারী লিঙ্ক


1

দয়া করে কোটলিন এবং এন্ডোয়ারডেক্স সমর্থন ব্যবহার করে এই প্রয়োগের সাথে এই উদাহরণটি অনুসরণ করুন:

button1.setOnClickListener{
        file = getPhotoFile()
        val uri: Uri = FileProvider.getUriForFile(applicationContext, "com.example.foto_2.filrprovider", file!!)
        captureImage.putExtra(MediaStore.EXTRA_OUTPUT, uri)

        val camaraActivities: List<ResolveInfo> = applicationContext.getPackageManager().queryIntentActivities(captureImage, PackageManager.MATCH_DEFAULT_ONLY)

        for (activity in camaraActivities) {
            applicationContext.grantUriPermission(activity.activityInfo.packageName, uri, Intent.FLAG_GRANT_WRITE_URI_PERMISSION)
        }

        startActivityForResult(captureImage, REQUEST_PHOTO)
    }

এবং ক্রিয়াকলাপের ফলাফল:

if (requestCode == REQUEST_PHOTO) {
        val uri = FileProvider.getUriForFile(applicationContext, "com.example.foto_2.filrprovider", file!!)
        applicationContext.revokeUriPermission(uri, Intent.FLAG_GRANT_WRITE_URI_PERMISSION)
        imageView1.viewTreeObserver.addOnGlobalLayoutListener {
            width = imageView1.width
            height = imageView1.height
            imageView1.setImageBitmap(getScaleBitmap(file!!.path , width , height))
        }
        if(width!=0&&height!=0){
            imageView1.setImageBitmap(getScaleBitmap(file!!.path , width , height))
        }else{
            val size = Point()
            this.windowManager.defaultDisplay.getSize(size)
            imageView1.setImageBitmap(getScaleBitmap(file!!.path , size.x , size.y))
        }

    }

আপনি https://github.com/joelmmx/take_photo_kotlin.git এ আরও বিশদ পেতে পারেন

আমি এটি আপনাকে সাহায্য করে আশা করি!

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.