2014-03-04 65 views
0

這裏有一個我有的示例代碼,在這裏我做了一個小應用程序,可以從圖庫中捕獲圖像或從圖像中獲取圖像,然後填充爲imagebuttons背景。所以,我要的是保存該圖像到數據庫,然後在imageview的:)取回什麼將圖像從圖像按鈕保存到sqllite然後在圖像視圖中檢索

package com.example.imageviewok; 

import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.OutputStream; 
import android.net.Uri; 
import android.os.Bundle; 
import android.os.Environment; 
import android.provider.MediaStore; 
import android.app.Activity; 
import android.app.AlertDialog; 
import android.content.DialogInterface; 
import android.content.Intent; 
import android.database.Cursor; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.util.Log; 
import android.view.Menu; 
import android.view.View; 
import android.widget.ImageButton; 
import android.widget.ImageView; 

public class MainActivity extends Activity { 
    ImageButton a; 
    ImageView b; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

a = (ImageButton)findViewById(R.id.imageButton1); 

     a.setOnClickListener(new View.OnClickListener() { 

      @Override 

      public void onClick(View v) { 

       selectImage(); 

      } 

     }); 
    } 
    private File savebitmap(Bitmap bmp) { 
     String extStorageDirectory = Environment.getExternalStorageDirectory().toString(); 
     OutputStream outStream = null; 
    // String temp = null; 
     File file = new File(extStorageDirectory, "temp.png"); 
     if (file.exists()) { 
     file.delete(); 
     file = new File(extStorageDirectory, "temp.png"); 

     } 

     try { 
     outStream = new FileOutputStream(file); 
     bmp.compress(Bitmap.CompressFormat.PNG, 100, outStream); 
     outStream.flush(); 
     outStream.close(); 

     } catch (Exception e) { 
     e.printStackTrace(); 
     return null; 
     } 
     return file; 
    } 
    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 
    private void selectImage() { 



      final CharSequence[] options = { "Take Photo", "Choose from Gallery","Cancel" }; 



      AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); 

      builder.setTitle("Add Photo!"); 

      builder.setItems(options, new DialogInterface.OnClickListener() { 

       @Override 

       public void onClick(DialogInterface dialog, int item) { 

        if (options[item].equals("Take Photo")) 

        { 

         Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 

         File f = new File(android.os.Environment.getExternalStorageDirectory(), "temp.jpg"); 

         intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(f)); 
         //pic = f; 

         startActivityForResult(intent, 1); 


        } 

        else if (options[item].equals("Choose from Gallery")) 

        { 

         Intent intent = new Intent(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 

         startActivityForResult(intent, 2); 



        } 

        else if (options[item].equals("Cancel")) { 

         dialog.dismiss(); 

        } 

       } 

      }); 

      builder.show(); 

     } 



     @Override 

     protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

      super.onActivityResult(requestCode, resultCode, data); 

      if (resultCode == RESULT_OK) { 

       if (requestCode == 1) { 
        //h=0; 
        File f = new File(Environment.getExternalStorageDirectory().toString()); 

        for (File temp : f.listFiles()) { 

         if (temp.getName().equals("temp.jpg")) { 

          f = temp; 
          File photo = new File(Environment.getExternalStorageDirectory(), "temp.jpg"); 
          //pic = photo; 
          break; 

         } 

        } 

        try { 

         Bitmap bitmap; 

         BitmapFactory.Options bitmapOptions = new BitmapFactory.Options(); 



         bitmap = BitmapFactory.decodeFile(f.getAbsolutePath(), 

           bitmapOptions); 



         a.setImageBitmap(bitmap); 




         String path = android.os.Environment 

           .getExternalStorageDirectory() 

           + File.separator 

           + "Phoenix" + File.separator + "default"; 
         //p = path; 

         f.delete(); 

         OutputStream outFile = null; 

         File file = new File(path, String.valueOf(System.currentTimeMillis()) + ".jpg"); 

         try { 

          outFile = new FileOutputStream(file); 

          bitmap.compress(Bitmap.CompressFormat.JPEG, 85, outFile); 
    //pic=file; 
          outFile.flush(); 

          outFile.close(); 


         } catch (FileNotFoundException e) { 

          e.printStackTrace(); 

         } catch (IOException e) { 

          e.printStackTrace(); 

         } catch (Exception e) { 

          e.printStackTrace(); 

         } 

        } catch (Exception e) { 

         e.printStackTrace(); 

        } 

       } else if (requestCode == 2) { 



        Uri selectedImage = data.getData(); 
        // h=1; 
    //imgui = selectedImage; 
        String[] filePath = { MediaStore.Images.Media.DATA }; 

        Cursor c = getContentResolver().query(selectedImage,filePath, null, null, null); 

        c.moveToFirst(); 

        int columnIndex = c.getColumnIndex(filePath[0]); 

        String picturePath = c.getString(columnIndex); 

        c.close(); 

        Bitmap thumbnail = (BitmapFactory.decodeFile(picturePath)); 


        Log.w("path of image from gallery......******************.........", picturePath+""); 


        a.setImageBitmap(thumbnail); 

       } 

      } 

     } 

} 
+0

你想要什麼??? – rajshree

+0

這段代碼的功能是點擊圖像按鈕時,它會詢問是捕獲圖像還是從圖庫中上傳圖像,然後捕獲或選擇的圖像將成爲圖像按鈕的背景圖像,但現在我只想做將imagebuttons背景保存爲sqllite,然後將代碼保存在稍後的圖像視圖中以供檢索和查看。 –

+0

用於將圖像保存到squlite中使用Blob ... – rajshree

回答

1

要保存到SQLite使用BLOB類型,當你創建表的字段,然後將其保存:

public byte[] getPhotoAsByte(){ 
    ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
    if(getPhoto() != null){ 
     getPhoto().compress(Bitmap.CompressFormat.PNG, 100, stream); 
     return stream.toByteArray(); 
    } else { 
     return null; 
    } 
} 

然後把它找回來使用:

Bitmap picture = cursor.getBlob(cursor.getColumnIndex("Photo"); 
相關問題