کلیدستان

نسخه‌ی کامل: کپی کردن عکس در حافظه تلفن (در برنامه نویسی اندروید)
شما در حال مشاهده نسخه آرشیو هستید. برای مشاهده نسخه کامل کلیک کنید.
سلام
من میخوام وقتی روی یک دکمه کلیک کردم عکس داخل imageView داخل حافظه داخلی گوشی (نه مموری) کپی بشه.
عکس ها داخل پوشه drawable هستن. ممنون میشم کسی کمکم کنه.
سلام میتونید از کد زیر برای این کار استفاده کنید .

کد پی‌اچ‌پی:
Bitmap bm BitmapFactory.decodeResourcegetResources(), R.drawable.ic_launcher);
        File root Environment.getExternalStorageDirectory();
        
File file = new File(root.getAbsolutePath(), "ic_launcher.PNG");
        try {
            
FileOutputStream outStream = new FileOutputStream(file);
            
bm.compress(Bitmap.CompressFormat.PNG100outStream);
            
outStream.flush();
            
outStream.close();
            
Toast.makeText(activity.this,"کپی با موفقیت انجام شد ",Toast.LENGTH_LONG).show();
        } catch (
Exception e) { throw new RuntimeException(e);
            
Toast.makeText(activity.this,"کپی انجام نشد!!!",Toast.LENGTH_LONG).show();
        } 

موفق باشید
سلام دوست عزیز
ممنون از راهنمایید
فقط چنتا سوال؟
ic_launcher.PNG اسم عکسیه که قراره کپی کنه؟ من میخوام هر کسی که تو ایمیج ویو هست رو کی کنه.
با این کد عکس دقیقا کجا کپی میشه؟ تلفن یا مموری؟
اگه این کد رو داخل دکمه بذارم و رو دکمه کلیک کنم خطایی نمیده؟ عکس کپی میشه؟

 
سلام
این کد دو قسمت ورودی و خروجی داره
ورودی این کد ینی قمستی که نام تصویر رو از پوشه ی drawable انتخاب میکنیم :

کد:
Bitmap bm = BitmapFactory.decodeResource( getResources(), R.drawable.ic_launcher);

ic_launcher نام تصویر مورد نظرتونه که داخل پوشه drawable  قرار داره
این قسمت هم برای خروجی و نامی ک ذخیره میشه و پوشه ی مورد نظر

کد:
File file = new File(root.getAbsolutePath(), "ic_launcher.PNG");

ic_launcher.PNG  این قسمت برای نام فایلتونه که قسمت اخرش ینی .png برای نوع فورمت تصویره
root.getAbsolutePath() این قسمت به این معنیه که محل ذخیرتون داخل حافظه ی گوشیه میتونید به شکل زیر اونو عوض کنید :

کد:
File file = new File(root.getAbsolutePath() + "/folder/" , "ic_launcher.PNG");

"/" این نماد به معنی جدا کردن پوشهاست

برای اینکه تصویری که روی ایمج ویوت هست کپی کنی بهتره اسم اون مسیر اونو ک از نوع int  هست بزاری به جای این قسمت 

کد:
R.drawable.ic_launcher

امیدوارم منظورمو متوجه شده باشید
موفق باشید
سلام دوست عزیز
ممنون از راهنماییت. بله توضیحاتتون رو متوجه شدم. اما نمیدونم این کدهارو دقیقا کجا بنویسم.
من میخوام با کلیک کردن رو دکمه عکس ذخیره بشه. من این کدهارو تو رویداد setonclick دکمه نوشتم اما جواب نداد و خطا میگرفت. 
ممنون میشم راهنمایی کنید.
و سوال دیگه اینکه قسمت آخر توضیحاتتون رو متوجه نشدم.
یعنی من یه ارایه از نوع int تعریف کنم که داخل ارایه  اسم های عکس هام هست و بعد اسم اون متغیر رو بجای R.drawable.ic_launcher بذارم؟؟؟؟
منظورتون به این شکله؟؟؟
integer img[] = " image1.png, image2.png, image3.png
سلام

با توجه به توضیحات و کدهای اقای Aliasghar 
کد کامل برنامه رو براتون ارسال کردم.

فایل AndroidManifest.xml
کد:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.example.mahdi.test1">

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

   <application
       android:allowBackup="true"
       android:icon="@mipmap/ic_launcher"
       android:label="@string/app_name"
       android:supportsRtl="true"
       android:theme="@style/AppTheme">
       <activity android:name=".MainActivity">
           <intent-filter>
               <action android:name="android.intent.action.MAIN" />

               <category android:name="android.intent.category.LAUNCHER" />
           </intent-filter>
   </application>

</manifest>


فایل MainActivity.java
کد:
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

public class MainActivity extends AppCompatActivity {


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

       final ImageView iv = (ImageView) findViewById(R.id.iv);
       Button btnsave = (Button) findViewById(R.id.btnsave);


       try {
           InputStream ims = getAssets().open("Tulips.jpg");
           Drawable d = Drawable.createFromStream(ims, null);
           iv.setImageDrawable(d);
       } catch (IOException ex) {
           Toast.makeText(MainActivity.this,"خطا", Toast.LENGTH_LONG).show();
       }


       btnsave.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View v) {
               Bitmap bm = ((BitmapDrawable)iv.getDrawable()).getBitmap();
               File root = Environment.getExternalStorageDirectory();
               File file = new File(root.getAbsolutePath(), "ic_launcher.jpg");
               try {
                   FileOutputStream outStream = new FileOutputStream(file);
                   bm.compress(Bitmap.CompressFormat.JPEG, 100, outStream);
                   outStream.flush();
                   outStream.close();
                   Toast.makeText(MainActivity.this,file.getAbsolutePath()+ "کپی با موفقیت انجام شد ", Toast.LENGTH_LONG).show();
               } catch (Exception e) {
                   Toast.makeText(MainActivity.this, "کپی انجام نشد!!!", Toast.LENGTH_LONG).show();
               }
           }
       });
   }

}
نکته : 
این تکه از کد جهت ارسال عکس موجود در پوشه Assets به ImageView هستش.
کد:
       try {
           InputStream ims = getAssets().open("Tulips.jpg");
           Drawable d = Drawable.createFromStream(ims, null);
           iv.setImageDrawable(d);
       } catch (IOException ex) {
           Toast.makeText(MainActivity.this,"خطا", Toast.LENGTH_LONG).show();
       }

در صورتی که تصاویر شما در پوشه Drawable هستن نیازی به این تکه کد نیست و میتونید حذفش کنید و به صورت عادی از 
کد:
imageView.setImageDrawable(R.drawable.Tulips.jpg);
استفاده کنید.