使用Sqlite数据库捕获,保存和检索图像/图片

时间:2012-11-15 10:07:21

标签: c# sqlite windows-8 microsoft-metro

在我的Windows 8应用程序(C#)中,我想捕获图像(我完成),然后将其保存到Sqlite数据库。由于Sqlite不支持BipmapImage,Uri类型等(我试过但是给出了不支持的存储的例外..)我该怎么做?

我只是想将图像保存在我使用相机捕获的本地数据库中,然后检索这些图像(设置为绑定)。请建议我实现此目的的其他选择。

我还尝试将Uri转换为字符串,然后将此字符串保存到SQLite数据库中,然后再将字符串转换为Uri,然后制作Bitmap图像,但我无法实现这一点(这是一种正确的方法吗?)。

如果您可以分享我的任何样品,请执行此操作。我花了很多时间,但不知道我做错了什么!

谢谢Zauk

2 个答案:

答案 0 :(得分: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;  
}

答案 1 :(得分:0)

您可以通过这种方式将摄像头捕获的图像保存到SQLitedatabase中。

公共类CamActivity扩展了Activity {

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

}
        });
    }

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

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

    }

}



    }