No imaging component suitable to complete this operation was found.wpf c# [duplicate]

南楼画角 提交于 2020-01-16 07:40:09

问题


I'm trying to load image from my .mdb database in WPF. I'm using this code :

public void loadimg()
{
    con.Open();
    OleDbCommand cmd = new OleDbCommand("Select * from recents", con);
    DataTable table = new DataTable;
    OleDbDataAdapter adap = new OleDbDataAdapter(cmd);
    adap.Fill(table);
    if (table.Rows.Count <= 0)
    {
        MsgBox("nooo");
    }
    else
    {
        MemoryStream stream = new MemoryStream();
        StreamWriter stm;
        BinaryWriter writer = new BinaryWriter(stream);
        int bufferSize = 100;
        byte[] outByte = new byte[bufferSize + 1];
        long retval;
        long startIndex = 0;
        string pubID = "";
        OleDbDataReader reader = cmd.ExecuteReader(CommandBehavior.SequentialAccess);
        reader.Read();
        while (reader.Read())
        {
            startIndex = 0;
            retval = reader.GetBytes(1, startIndex, outByte, 0, bufferSize);
            while (retval == bufferSize)
            {
                writer.Write(outByte);
                writer.Flush();
                startIndex += bufferSize;
                retval = reader.GetBytes(1, startIndex, outByte, 0, bufferSize);
            }

            writer.Write(outByte, 0, (int)retval - 1);
            writer.Flush();
        }

        reader.Close();
        con.Close();
        stream.Position = 0;
        stream.Seek(0, SeekOrigin.Begin);
        System.Drawing.Image _Image = System.Drawing.Image.FromStream(stream);
        image1.Source = System.Windows.Media.Imaging.BitmapFrame.Create(stream);
    }
}

The code above returns an error :

No imaging component suitable to complete this operation was found.

I spent hours trying to figure out how to fix it.Any help would be highly appreciated.

Update In the comments, i was asked if i inserted the data properly..Well,here's the code i used to insert the data :

public void adddata()
{
con.Open();
OleDbCommand cmd = new OleDbCommand("Insert into   recents(Pic)values(@pic)", con);
byte[] data;
System.Drawing.Image myimage =  System.Drawing.Image.FromFile("E:\\19686468_1419770068104721_1127495277_o.png");
using (MemoryStream ms = new MemoryStream())
{
    myimage.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp);
    data = ms.ToArray();
}

cmd.Parameters.AddWithValue("@pic", data);
cmd.ExecuteNonQuery();
con.Close();
}

Please help me out!


回答1:


Fixed it...For anyone who faces this error in future :

  1. Make sure you're inserting the data in the proper way(sometimes corrupted data in the db causes such errors)

2 . You don't need to do some heavy coding to convert the image to byte!

Finally,let's code :

public void loadimg()
{
    con.Open();
    OleDbCommand cmd = new OleDbCommand("Select * from recents", con);
    OleDbDataReader _dr;
    _dr = cmd.ExecuteReader;
    byte[] _photo;
    while (_dr.Read())
    {
        try
        {
            _photo = (byte[])_dr(1);
            BitmapImage bi = new BitmapImage();
            using (MemoryStream strm = new MemoryStream(_photo))
            {
                bi.BeginInit();
                bi.CacheOption = BitmapCacheOption.OnLoad;
                bi.StreamSource = strm;
                bi.EndInit();
            }
            image1.Source = bi;
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }
}


来源:https://stackoverflow.com/questions/48968100/no-imaging-component-suitable-to-complete-this-operation-was-found-wpf-c-sharp

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!