Android 从应用程序资源保存到SD卡的图像编号

Android 从应用程序资源保存到SD卡的图像编号,android,android-gallery,save-image,Android,Android Gallery,Save Image,我有一个由天组成的应用程序listview每天都将其特定的图像放置在无限画廊类中,我想做的是: 使用序列号将图像从应用程序可绘制资源(无限多媒体资料类)保存到sd卡 我正在尝试获取保存图像的序列号,如下所示: 第一张图片:image-1.png 第二张图片:image-2.png 第三张图片:image-3.png 一整天都如此 使用: Random generator = new Random(); 这将导致: View vi=convertView; final ViewHo

我有一个由天组成的应用程序listview每天都将其特定的图像放置在无限画廊类中,我想做的是:

使用序列号将图像从应用程序可绘制资源(无限多媒体资料类)保存到sd卡

我正在尝试获取保存图像的序列号,如下所示:

第一张图片:image-1.png

第二张图片:image-2.png

第三张图片:image-3.png

一整天都如此

使用:

 Random generator = new Random();
这将导致:

 View vi=convertView; 
    final ViewHolder holder; 
    if(convertView==null){ 
        vi = inflater.inflate(R.layout.gallery_items, null); 
        holder=new ViewHolder(); 
        holder.text=(TextView)vi.findViewById(R.id.textView1); 
        holder.image=(ImageView)vi.findViewById(R.id.image); 
        holder.button=(Button)vi.findViewById(R.id.button_save);

 bm = BitmapFactory.decodeResource( mContext.getResources(), images[itemPos]);
         holder.image.setImageBitmap(bm);

        holder.button.setOnClickListener(new OnClickListener() {

  public void onClick(View arg0) {

      String root = Environment.getExternalStorageDirectory().toString();
        File imagesFolder = new File(root + "/Days pictures");    
        imagesFolder.mkdirs();

        Random generator = new Random();
        int n = 1000;
     n = generator.nextInt(n);
     String fname = "Image-"+ n +".png";
     File file = new File (imagesFolder, fname);
     if (file.exists ())
       file.delete (); 
     try {
        FileOutputStream out = new FileOutputStream(file);
        bm.compress(Bitmap.CompressFormat.PNG, 100, out);
        out.flush();
        out.close();

        Toast.makeText(mContext, "Saved", Toast.LENGTH_LONG).show();}   
        catch (Exception e) {
             e.printStackTrace();    
       Toast.makeText(mContext, e.toString(), Toast.LENGTH_SHORT).show();}}});

      vi.setTag(holder);}

    else holder=(ViewHolder)vi.getTag(); 
    holder.text.setText(name[itemPos]); 

    final int stub_id=images[itemPos]; 
    holder.image.setImageResource(stub_id); 

    return vi; } 

private ImageView getImageView() { 

    ImageView i = new ImageView(mContext); 

    return i; } }
第一期:使用随机数字保存图像

第二期:它并没有保存所有图像,而是由用户选择保存到sd卡,同时它还保存了部分图像两到三次

这是与保存图像相关的代码部分:

 View vi=convertView; 
    final ViewHolder holder; 
    if(convertView==null){ 
        vi = inflater.inflate(R.layout.gallery_items, null); 
        holder=new ViewHolder(); 
        holder.text=(TextView)vi.findViewById(R.id.textView1); 
        holder.image=(ImageView)vi.findViewById(R.id.image); 
        holder.button=(Button)vi.findViewById(R.id.button_save);

 bm = BitmapFactory.decodeResource( mContext.getResources(), images[itemPos]);
         holder.image.setImageBitmap(bm);

        holder.button.setOnClickListener(new OnClickListener() {

  public void onClick(View arg0) {

      String root = Environment.getExternalStorageDirectory().toString();
        File imagesFolder = new File(root + "/Days pictures");    
        imagesFolder.mkdirs();

        Random generator = new Random();
        int n = 1000;
     n = generator.nextInt(n);
     String fname = "Image-"+ n +".png";
     File file = new File (imagesFolder, fname);
     if (file.exists ())
       file.delete (); 
     try {
        FileOutputStream out = new FileOutputStream(file);
        bm.compress(Bitmap.CompressFormat.PNG, 100, out);
        out.flush();
        out.close();

        Toast.makeText(mContext, "Saved", Toast.LENGTH_LONG).show();}   
        catch (Exception e) {
             e.printStackTrace();    
       Toast.makeText(mContext, e.toString(), Toast.LENGTH_SHORT).show();}}});

      vi.setTag(holder);}

    else holder=(ViewHolder)vi.getTag(); 
    holder.text.setText(name[itemPos]); 

    final int stub_id=images[itemPos]; 
    holder.image.setImageResource(stub_id); 

    return vi; } 

private ImageView getImageView() { 

    ImageView i = new ImageView(mContext); 

    return i; } }

感谢您的帮助。

只需使用
进行循环即可。如果你想在SD卡上保存多少图像

for(int n=1 ; n <= size ; n++){
String fname = "Image-"+ n +".png";
 // you other stuff here
}

for(int n=1;n原谅随机,如果您希望图像按顺序排列(如Pragnani建议的,并且您在上面的评论中同意),并且假设您的代码正常,请执行以下操作:

    Override
    public void onClick(View arg0) {
        String root = Environment.getExternalStorageDirectory().toString();
        File imagesFolder = new File(root + "/imagesFolder");    
        imagesFolder.mkdirs();

        for (int i = 0; i < 10; i++) { 
            String fname = "Image-" + i + ".png";
            File file = new File (imagesFolder, fname);

            if (file.exists ()) file.delete (); 
            try {
               FileOutputStream out = new FileOutputStream(file);

               bm.compress(Bitmap.CompressFormat.PNG, 100, out);
               out.flush();
               out.close();
               Toast.makeText(MainActivity.this, "Saved", Toast.LENGTH_SHORT).show();
            } catch (Exception e) {
               e.printStackTrace();
               Toast.makeText(MainActivity.this, e.toString(), Toast.LENGTH_SHORT).show();
            }
        }
    }
覆盖
公共void onClick(视图arg0){
String root=Environment.getExternalStorageDirectory().toString();
File imagesFolder=新文件(root+“/imagesFolder”);
imagesFolder.mkdirs();
对于(int i=0;i<10;i++){
字符串fname=“Image-”+i+”.png”;
文件文件=新文件(imagesFolder,fname);
如果(file.exists())file.delete();
试一试{
FileOutputStream out=新的FileOutputStream(文件);
bm.compress(Bitmap.CompressFormat.PNG,100,out);
out.flush();
out.close();
Toast.makeText(MainActivity.this,“Saved”,Toast.LENGTH_SHORT.show();
}捕获(例外e){
e、 printStackTrace();
Toast.makeText(MainActivity.this,e.toString(),Toast.LENGTH_SHORT).show();
}
}
}

测试它并让我知道。

从您的问题和评论中,我可以理解您想要将n个图像保存到SD卡

要保存,请执行以下步骤

步骤1:获取所需的所有图像。确保在此处正确获取图像列表

步骤2:计算列表中图像的数量并将其存储在变量中

      int numberOfImages = 15;// Get it dynamically 
步骤3:现在循环它以按顺序存储所有图像

   //Create Directory to store images in SDCard
   String root = Environment.getExternalStorageDirectory().toString();
       File myDir = new File(root + "/saved_images");
       if(!myDir.exists()){
           myDir.mkdirs();
          } 
           // You have to get next image here from the resource here
           bm = BitmapFactory.decodeResource( mContext.getResources(), images[i]);// value for itemPos should be given here.

           // Get Last Saved Number
           SharedPreferences savedNumber = getSharedPreferences(PREFS_NAME, 0);
           int lastSavedNumber = savedNumber.getInt("lastsavednumber",0); 
           lastSavedNumber++;
           String fname = "Image-"+lastSavedNumber+".png";

           File file = new File (myDir, fname);
           if (file.exists ()) {file.delete (); }
           try {
                  FileOutputStream out = new FileOutputStream(file);
                  bm.compress(Bitmap.CompressFormat.JPEG, 90, out);//Your Bitmap from the resouce
                  out.flush();
                  out.close();

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

      //To Store the last Number
     SharedPreferences saveNumber = getApplicationContext().getSharedPreferences(PREFS_NAME, 0);
     SharedPreferences.Editor editorset = saveNumber.edit();
     editorset.putInt("lastsavednumber",lastSavedNumber);   
     editorset.commit();   
如果您在第一步中做错了任何事情,就会发生复制

编辑 要按顺序存储所有图像,请使用SharedReferences存储上次保存的图像编号

    public static final String PREFS_NAME = "ImageNumber";  

    // Get Last Saved Number
    SharedPreferences savedNumber = getSharedPreferences(PREFS_NAME, 0);
    int lastSavedNumber = savedNumber.getInt("lastsavednumber",0); 
    lastSavedNumber++;
    String fname = "Image-"+lastSavedNumber+".png";

    //To Store Last Saved Number
     SharedPreferences saveNumber = getApplicationContext().getSharedPreferences(PREFS_NAME, 0);
     SharedPreferences.Editor editorset = saveNumber.edit();
     editorset.putInt("lastsavednumber",lastSavedNumber);   
     editorset.commit();   

如果您希望图像按顺序排列,为什么要生成随机数?@Pragnani请告诉我,我是android新手,每次保存图像时,都要将n作为字段并递增n。我替换为:Random generator=new Random();int n=10000;n=generator.nextInt(n);String fname=“image——”+n+“.png”和您的代码:for(int n=1;n@androidqq6:将您的代码片段从应用程序存储到sd卡上,以了解如何解决您的问题。@androidq6:在保存这样的图像之前是否创建位图,位图bm=BitmapFactory.decodeResource(getResources(),R.drawable.ic_启动器);请参考下面的链接了解更多详细信息我以前尝试过这个,当按一次save按钮时,它会同时保存10张图片,顺序为image-1、image-10、image-2、image-3等等。我的朋友,我上面的代码是完整项目的一部分,为了清楚起见,我会用完整的类更新帖子,包括要保存的图片,最好是理解我亲爱的朋友,我对开发还是新手,但这里应该给出你所说的://value for itemPos的意思。在你的回答中,我试图解决我的问题,然后我会更新我的帖子来检查它,谢谢。我想问一个问题。你从哪里得到的图像?你是如何得到图像的?你能更新代码吗?我现在会更新整个过程我的帖子中的活动包括保存图像的for循环为了更清晰,我的朋友,感谢上面的代码我可以发现你只会存储一张图像多次。你现在要做的是
例如
如果你想在
第1天
中存储所有图像,那么你需要获得所有的资源和帮助gn到位图以使用Loop将其存储在sd卡中清除我自己,想象您正在用户浏览我的应用程序,您打开Day1 gallery您喜欢Day1中的2幅图像并希望将其保存到sd,然后打开Day2您不喜欢其gallery中的任何图像,然后打开Day3 gallery中的3幅图像并希望保存,依此类推,这样您最终可以易于保存任何图像您选择1个图像或9个图像或所有图像一个接一个,这是我的想法,但我不想一步保存一整天的图像,这是我希望它的工作方式,谢谢