1

私はアプリを毎日リストビューで構成し、特定の画像を無限のギャラリークラスに配置しています。私がやろうとしているのは次のとおりです。

アプリのドローアブル リソース (無限ギャラリー クラス) から sd カードに連番で画像を保存し

以下のように、保存された画像の連続番号を取得しようとしています:

最初の画像 :Image-1.png .

2番目の画像:Image-2.png .

3 番目の画像: Image-3.png 、

など、すべての日に適用されます。

を使用して:

 Random generator = new Random();

これにより、次のようになります。

第 1 号: 画像を乱数で保存。

2 番目の問題: すべての画像を保存するのではなく、ユーザーが sd カードに保存するように選択し、一部の画像を 2 回または 3 回保存します。

これは、画像の保存に関連するコードの一部です。

 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; } }

ご協力いただきありがとうございます 。

4

3 に答える 3

0

単純にforループを使用します。SDカードに保存したい画像のサイズを取得した場合、

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

これがお役に立てば幸いです。

于 2013-03-27T18:11:30.277 に答える
0

ランダムを許してください。画像を順番に並べたい場合(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();
            }
        }
    }

それをテストして、私に知らせてください。

于 2013-04-13T09:02:55.880 に答える