Zeshan Aman
Zeshan Aman

Reputation: 111

Capture, save and retrieve images/pictures using Sqlite database

In my windows 8 application(C#), I want to capture images (I done) and then save it to a Sqlite database. As Sqlite is not supporting BipmapImage, Uri types etc (I tried but giving exceptions of not supported storage..) How can I do this?

I simply want to save images in local database that I have captured using camera and then retrieve these images (set to binding). Please suggest me other options to achieve this.

I also tried to convert Uri into string and then saving this string into SQLite db and then again converting string to Uri and then making Bitmap images but I couldn't achieve this (is it a right approach ?).

If you can share me any sample please do it. I spent many hours in it but don't know where I am doing wrong!

Thanks Zauk

Upvotes: 1

Views: 4293

Answers (2)

anshika
anshika

Reputation: 141

You can save camera captured image into SQLitedatabase in this way..

public class CamActivity extends 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(byteArray,name);

            }              

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

    }

}



    }

Upvotes: 0

Asif Mushtaq
Asif Mushtaq

Reputation: 13150

Although I do not prefer to save images in a database.

But if you want to save images in the database then one way of doing this is to convert your images to base64 string and then save the string in SQLite database.

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

Upvotes: 2

Related Questions