2017-03-11 21 views
-1

自分のサーバーに画像があります。これらの画像をダウンロードしてローカルデータベース(SQLiteを使用)に保存したい場合、これらの画像をローカルで使用します。SQLiteデータベースからビットマップを返すにはどうすればいいですか

私はSQLiteデータベースにビットマップとして画像を保存しましたが、そのデータベースからビットマップでもバイトとして取得する必要があります。

これは

はURLから画像を取得する。..私のコードです:私はそのidでそれを返すようにしたい

// SQLite.. Creating database to store images 
private class MainDatabase 
{ 
    // Constructor 
    public MainDatabase() 
    { 
     if(!System.IO.File.Exists(folder)) 
     { 
      var db = new SQLiteConnection(folder); 
      db.CreateTable<Image>(); 
     } 
    } 

    // Create database 
    string folder = System.IO.Path.Combine 
      (System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal), 
      "imagesDatabase.db"); 

    // Create Table 
    [Table("Image")] 
    public class Image 
    { 
     [Column("_id"), PrimaryKey , AutoIncrement] 
     public int _id { set; get; } 

     [Column("_image")] 
     public Bitmap _image { set; get; } 
     } 

     //Insert data 
     public void Insert(Bitmap image) 
     { 
      var db = new SQLiteConnection(folder); 
      var imageColumn = new Image(); 
      imageColumn._image = image; 
      db.Insert(imageColumn); 

     } 

     //Retrieving data 

     public Bitmap GetImageById(int id) 
     { 
      var db = new SQLiteConnection(folder); 

      var image = from p in db.Table<Image>() 
         where p._id == id 
         select p._image; 

      return image; // doesn't work 
     } 
    } 

:ローカルデータベースを作成するために、SQLiteのを使用し

private Bitmap GetImageBitmapFromUrl1(string url) 
{ 
    Bitmap imagebitmap = null; 
    using (var webClient = new WebClient()) 
    { 
     var imageBytes = webClient.DownloadData("..." + url); 
     if (imageBytes != null && imageBytes.Length > 0) 
     { 
      imagebitmap = BitmapFactory.DecodeByteArray(imageBytes, 0, imageBytes.Length); 
     } 
    } 
    return imagebitmap; 
} 

答えて

0

私はSQLiteデータベースにビットマップとして画像を保存しました。そのデータベースからビットマップとしてもバイトとして取得する必要があります。

ビットマップをSQLiteに直接格納することはできません。あなたのコードを実行すると、サポートされていないタイプのエラーが出ます。 BitmapをSQLiteに格納する唯一の方法は、バイト配列で格納して取得することです。しかし、あなたのメソッドに変換プロセスをラップし、あなたのアクティビティでBitmapを直接渡すことができます:

public class MainDatabase 
{ 
    // Constructor 
    public MainDatabase() 
    { 
     //if (!System.IO.File.Exists(folder)) 
     //{ 
      var db = new SQLiteConnection(folder); 
      db.CreateTable<Image>(); 
     //} 
    } 

    // Create database 
    string folder = System.IO.Path.Combine 
      (System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal), 
      "imagesDatabase.db"); 

    // Create Table 
    [Table("Image")] 
    public class Image 
    { 
     [Column("_id"), PrimaryKey, AutoIncrement] 
     public int _id { set; get; } 

     [Column("_image")] 
     public byte[] _image { set; get; }// store the image with byte[] 
    } 

    public byte[] GetBitmapAsByteArray(Bitmap image) 
    { 
     MemoryStream stream = new MemoryStream(); 
     image.Compress(Bitmap.CompressFormat.Png, 0, stream); 
     return stream.ToArray(); 
    } 

    //Insert data 
    public int Insert(Bitmap image) 
    { 
     var db = new SQLiteConnection(folder); 
     var imageColumn = new Image(); 
     imageColumn._image = GetBitmapAsByteArray(image); 
     return db.Insert(imageColumn); 
    } 

    //Retrieving data 

    public Bitmap GetImageById(int id) 
    { 
     var db = new SQLiteConnection(folder); 
     Image image=db.Find<Image>(id); 
     // return the decoded Bitmap 
     return BitmapFactory.DecodeByteArray(image._image, 0, image._image.Length); 
    } 
} 
+0

thx私は自分のコードを変更しましたが、私と同じようです – AbdHayek

関連する問題