如何在保存多个图像时消除此问题

Posted

技术标签:

【中文标题】如何在保存多个图像时消除此问题【英文标题】:How to eradicate this issue in saving multiple images 【发布时间】:2013-12-02 11:32:47 【问题描述】:

我正在开发一个图像应用程序,并通过按钮 cliks 更改图像。当我保存 ImageView 的图像时,它会保存到设备中,当我保存另一个图像时,第一个图像会被删除。所以我仍然无法保存多张图像。请帮忙。 这是主要的java。

 public class Main extends Activity 
 private ImageView hImageViewPic;
 private Button iButton, gButton; 
 Bitmap bbicon;

  private int currentImage = 0; 
  int[] images =  R.drawable.r1, R.drawable.r2, R.drawable.r3, R.drawable.r4, R.drawable.r5, R.drawable.r6, R.drawable.r7, R.drawable.r8, R.drawable.r9, R.drawable.r10 ;
  public void onCreate(Bundle savedInstanceState) 
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main); 

  hImageViewPic = (ImageView)findViewById(R.id.idImageViewPic);
  iButton = (Button) findViewById(R.id.bNext); 
  gButton = (Button) findViewById(R.id.bPrev); 

  //Just set one Click listener for the image 

  iButton.setOnClickListener(iButtonChangeImageListener);
  gButton.setOnClickListener(gButtonChangeImageListener); 
     

  View.OnClickListener iButtonChangeImageListener = new OnClickListener() 
  public void onClick(View v) 

  //Increase Counter to move to next Image

  currentImage++; 
  currentImage = currentImage % images.length;
   hImageViewPic.setImageResource(images[currentImage]);
   
      ;

  View.OnClickListener gButtonChangeImageListener = new OnClickListener() 
 `public void onClick(View v) 

  //Increase Counter to move to next Image 

  currentImage--;
  currentImage = (currentImage + images.length) % images.length; 
  hImageViewPic.setImageResource(images[currentImage]);` 

   // here we set 3rd button to save the images

  Button bSaveImg = (Button) findViewById (R.id.bSave):
  ImageView imagePreview = (ImageView) findViewById (R.id.idImageViewPic);
  imagePreview.setImageResource (images [currentImage]);
  bSaveImg.setOnClickListener (new Button.OnClickListener () 

  @Override
    public void onClick (View arg0) 

  bbicon=BitmapFactory.decodeResource(getResources(),images [cirrentImage]);
  //ByteArrayOutputStream baosicon = new ByteArrayOutputStream(); 
  //bbicon.compress(Bitmap.CompressFormat.PNG,0, baosicon); 
  //bicon=baosicon.toByteArray();

   String extStorageDirectory = Environment.getExternalStorageDirectory().toString();
   OutputStream outStream = null; 
   File file = new File(extStorageDirectory, "er.PNG");

   try  
     outStream = new FileOutputStream(file); 
     bbicon.compress(Bitmap.CompressFormat.PNG, 100, outStream);
     outStream.flush(); 
     outStream.close(); 
     catch(Exception e) 
        
     
       );
    
      ;
    

所以请帮忙解决这个问题。

【问题讨论】:

您需要动态更改文件名,否则会覆盖,您将无法获得多个文件。 【参考方案1】:
 //Create Folder
 File folder = new File(Environment.getExternalStorageDirectory().toString()+"/Images");
 folder.mkdirs();

 //Save the path as a string value
 String extStorageDirectory = folder.toString();
 File file = new File(extStorageDirectory, System.currentTimeMillis()+".PNG");

不要忘记尝试并捕获并检查文件夹是否存在,然后执行其他操作,否则创建文件夹并将以下行放入清单文件中。

uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" 

【讨论】:

【参考方案2】:

更改 png 文件的名称,例如将 png 文件的名称与每个图像唯一的当前时间或日期一起输入。

改变

File file = new File(extStorageDirectory, "er.PNG");

File file = new File(extStorageDirectory, System.currentTimeMillis()+".PNG");

【讨论】:

如果我想添加保存图像的文件夹,请指导我。谢谢 检查我添加了另一个答案 好的,先生。但图片未显示在图库中。因为它保存在卡上。如果我想在图库中看到它,那么我必须重新启动我的设备。 看看这个***.com/questions/5107823/…【参考方案3】:

我更喜欢使用 DateTime 保存我的图像,因为它充当唯一实例

String strFileName=android.text.format.DateFormat.format("dd-MM-yyyy-hh-mm-ssaa", new java.util.Date()).toString();
File file = new File(path, strFileName+ ".png");

另外请记住,不建议将图像存储在 ExtStorageDirectory 上。而不是在外部存储中创建一个文件夹并将其保存在那里

File sdCard = Environment.getExternalStorageDirectory();
String path = sdCard.getAbsolutePath() + "/YourFolder/";
File dir = new File(path);
if (!dir.exists()) 
    if (dir.mkdirs()) 
    

为用户编辑

bSaveImg.setOnClickListener (new Button.OnClickListener () 

@Override
public void onClick (View arg0) 

bbicon=BitmapFactory.decodeResource(getResources(),images [cirrentImage]);
//ByteArrayOutputStream baosicon = new ByteArrayOutputStream(); 
//bbicon.compress(Bitmap.CompressFormat.PNG,0, baosicon); 
//bicon=baosicon.toByteArray();
///below code
File sdCard = Environment.getExternalStorageDirectory();
String path = sdCard.getAbsolutePath() + "/YourFolder/";
File dir = new File(path);
if (!dir.exists()) 
    if (dir.mkdirs()) 
    

  OutputStream outStream = null; 
 ///below Code
String strFileName=android.text.format.DateFormat.format("dd-MM-yyyy-hh-mm-ssaa", new java.util.Date()).toString();
File file = new File(path, strFileName+ ".png");

 try  
   outStream = new FileOutputStream(file); 
   bbicon.compress(Bitmap.CompressFormat.PNG, 100, outStream);
   outStream.flush(); 
   outStream.close(); 
   catch(Exception e) 
    
   
   );
  

【讨论】:

非常感谢您这么漂亮的回复先生。但我发现错误。没有 catch (Exception e) // 所以你能修改我的 java.lang.然后我会以更好的方式理解它。谢谢 @3004150 你能编辑你的问题并发布错误。 先生,我无法理解如何将您的代码放入 java 类中。 非常感谢先生。

以上是关于如何在保存多个图像时消除此问题的主要内容,如果未能解决你的问题,请参考以下文章

如何使用循环插入噪声并将多个图像保存在不同的文件夹中?(matlab)

如何在跟踪期间消除头部伪像 - HDN_TRACK?

如何使用具有离子和角度的照片相机在firebase中同时保存多个图像

iPhone使用唯一键加载和保存多个UIImages?

UWP - 如何启动并行运行的多个任务?

如何在一个地方为多个应用程序定义应用程序版本?