Преобразование двоичного в растровое изображение для imagelist.Ошибка кода - PullRequest
1 голос
/ 26 марта 2012

У меня проблемы с приведенным ниже кодом для преобразования двоичного источника в растровое изображение для вставки в мой список изображений.Я получаю сообщение «Параметр не действителен».

// Retrieving data from Database
private void Form1_Load(object sender, EventArgs e)
    {
        vcon.Open();
        string get = "Select Path, Images FROM IMGSTR";
        OleDbCommand cmdget = new OleDbCommand(get, vcon);
        OleDbDataReader reader;
        reader = cmdget.ExecuteReader();

        while (reader.Read())
        {
            string path = reader["Path"].ToString();

            //here is where I am receiving an error
            this.imageList1.Images.Add(Image.FromStream(new MemoryStream((byte[]) reader["Images"])));


             //creates rows in my listview to display images
            Graphics theGraphics = Graphics.FromHwnd(this.Handle);
            int count = this.listView1.Items.Count;
            for (; count < this.imageList1.Images.Count; count++)
            {
                listView1.Items.Add("", count);
            }


        }



     //Add Photos and Path to Database
    private void importImagesToolStripMenuItem_Click(object sender, EventArgs e)
    {
        FolderBrowserDialog dig = new FolderBrowserDialog();

        if (dig.ShowDialog() == DialogResult.OK)
        {
            MessageBox.Show("This May take a while. Depending on the size and amount of your photos. Click Ok to continue", "! ! !");
            foreach (String files in Directory.GetFiles(dig.SelectedPath))
            {
                if (files.EndsWith(".JPG"))
                {
                    //convert .jpg to thumbnail
                    Image image = new Bitmap(files);
                    Image pThumbnail = image.GetThumbnailImage(100, 100, null, new IntPtr());

                    //Insert Path and Image into database
                    string cmdstr = "INSERT into IMGSTR(Path, Images) values(path, image)";
                    OleDbCommand com = new OleDbCommand(cmdstr, vcon);
                    com.Parameters.AddWithValue("path", files);

                    //Storing Image into MS database as Ole Object
                    com.Parameters.AddWithValue("image", pThumbnail);

                    com.ExecuteNonQuery();

                    image.Dispose();
                }
            }
        }

Может кто-нибудь помочь мне понять, почему я получаю эту ошибку.Я новичок в компьютерном программировании и не понимаю, почему сам.

1 Ответ

0 голосов
/ 26 марта 2012
//you are casting the blob from pulled from the db to a byte array
while(reader.Read())
{
    this.imageList1.Images.Add(Image.FromStream(
        new MemoryStream((byte[] reader["Images"])
}

Но, по моему опыту, изображения, как правило, хранятся на сервере, и вы добавляете путь (ссылку) к файлу в базе данных, поскольку добавление большого двоичного объекта и его чтение - это очень тяжелые операции для базы данных.

...