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



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

从应用程序可绘制资源(无限图库类)中保存带有序号的图像到sd卡

我试图得到保存图像的顺序编号如下:

第一张图片:image -1.png .

第二张图片:image -2.png .

第三张图片:image -3.png,

,以此类推。

with using:

 Random generator = new Random();

这会导致:

第一期:以随机数保存图片。

第二个问题:它不是保存所有的图像是由用户选择保存到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; } }

谢谢你的帮助。

从您的问题和评论中我可以理解您想要保存n张图像到SDCard。

按以下步骤保存

步骤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();   

如果在第一步中做错了什么,就会发生重复。

编辑要按顺序存储所有图像,请使用SharedPreferences来存储最后保存的图像编号。

    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();   

直接使用for循环。如果你想在SD卡上保存多少图像,那么

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

原谅随机,如果您希望图像按顺序排列(如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();
            }
        }
    }

测试后告诉我

最新更新