1

私のWindows 8アプリケーション(C#)では、画像をキャプチャして(私はやった)、それをSqliteデータベースに保存したいと考えています。Sqlite は BipmapImage、Uri 型などをサポートしていないため (試してみましたが、サポートされていないストレージの例外を与えました..) どうすればこれを行うことができますか?

カメラを使用してキャプチャした画像をローカルデータベースに保存し、これらの画像を取得したいだけです(バインディングに設定)。これを達成するための他のオプションを提案してください。

また、Uriを文字列に変換してから、この文字列をSQLite dbに保存してから、文字列をUriに変換してからビットマップ画像を作成しようとしましたが、これを達成できませんでした(正しいアプローチですか?)。

サンプルを共有できる場合は、共有してください。私はそれに何時間も費やしましたが、どこが間違っているのかわかりません!

ありがとうザウク

4

2 に答える 2

2

データベースに画像を保存するのは好きではありませんが。

ただし、画像をデータベースに保存する場合、これを行う 1 つの方法は、画像を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;  
}
于 2012-11-15T10:30:27.157 に答える
0

この方法で、カメラでキャプチャした画像を SQLitedatabase に保存できます。

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(バイト配列、名前);

            }              

            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, インテント データ) {

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

    }

}



    }
于 2013-01-15T12:30:50.937 に答える