2012-11-15 58 views
1

在我的Windows 8應用程序(C#)中,我想捕獲圖像(我完成),然後將其保存到Sqlite數據庫。由於Sqlite不支持BipmapImage,Uri類型等(我試過但給出了不支持的存儲的例外..)我怎麼能做到這一點?使用Sqlite數據庫捕獲,保存和檢索圖像/圖片

我只是想保存本地數據庫中的圖像,我已經使用相機拍攝,然後檢索這些圖像(設置爲綁定)。請給我建議其他選擇來實現這一點。

我也嘗試將Uri轉換爲字符串,然後將此字符串保存到SQLite數據庫,然後再次將字符串轉換爲Uri,然後創建位圖圖像,但我無法實現這一點(這是一種正確的方法?)。

如果您可以與我分享任何樣品請做。我花了好幾個小時,但不知道自己在做錯什麼!

謝謝Zauk

回答

2

儘管我不喜歡將圖像保存在數據庫中。

但是,如果您想要將圖像保存在數據庫中,那麼執行此操作的一種方法是將圖像轉換爲base64字符串,然後將該字符串保存在SQLite數據庫中。

public string ConvertToString(Image image) 
{ 
    // First Convert image to byte array. 
    byte[] byteArray = new byte[0]; 
    using (MemoryStream stream = new MemoryStream()) 
    { 
     image.Save(stream, System.Drawing.Imaging.ImageFormat.Png); 
     stream.Close(); 

     byteArray = stream.ToArray(); 
    } 

    // Convert byte[] to Base64 String 
    string base64String = Convert.ToBase64String(byteArray); 

    return base64String; 
} 
0

您可以保存攝像機拍攝圖像分割成SQLitedatabase這樣..

公共類CamActivity延伸活動{

byte[] byteArray; 
private static final int CAMERA_REQUEST = 1888; 
protected static final int TAKE_PHOTO_CODE = 0; 
public ImageView imageView; 
private DBAdapter db; 
byte [] imgbyte; 
EditText txtView ; 
String name; 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    db=new DBAdapter(CamActivity.this); 
    db.open(); 
    this.imageView = (ImageView)this.findViewById(R.id.imageView1);   
    txtView=(EditText)findViewById(R.id.editText1); 
    Button B = (Button) this.findViewById(R.id.camera); 
    B.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
      // cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT,getImageUri()); 
      startActivityForResult(cameraIntent,CAMERA_REQUEST); 
     } 
    }); 

    Button save = (Button)findViewById(R.id.saving); 
    save.setOnClickListener(new View.OnClickListener() {    
     public void onClick(View v) { 




      name=txtView.getText().toString(); 


      try 
      { 

db.insertImageDetails(字節陣列,姓名);

  }    

      catch (Exception e) { 
       e.printStackTrace(); 
      } 
      //mySQLiteAdapter.close(); 

      Toast.makeText(getApplicationContext(), "processing", Toast.LENGTH_SHORT).show(); 
      Toast.makeText(getApplicationContext(), "image saved", Toast.LENGTH_SHORT).show(); 

      }}); 

    Button G = (Button) this.findViewById(R.id.get); 
    G.setOnClickListener(new View.OnClickListener() {   
     public void onClick(View v) 

     { 

      Intent intent= new Intent(CamActivity.this,SecondActivity.class); 
      startActivity(intent); 

} 
     }); 
    } 

保護無效onActivityResult(INT requestCode,INT resultCode爲,意圖數據){

//final byte[] byteArray; 
    if (requestCode == CAMERA_REQUEST) { 
     Bitmap photo = (Bitmap) data.getExtras().get("data"); 
     //imageView.setImageBitmap(photo);  
     ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
     photo.compress(Bitmap.CompressFormat.PNG, 100, stream); 
     byteArray = stream.toByteArray(); 
     System.out.println(byteArray); 
     Toast.makeText(getApplicationContext(), byteArray.toString(), Toast.LENGTH_SHORT).show(); 

    } 

} 



    } 
+0

這是一個很大的代碼只是做1件簡單的事情,你不覺得嗎? – Lyle

相關問題