0

我有一个包含以下列的数据库表:idCompany:INT、Data:LONGBLOB、Extension:VARCHAR(5)、Name:VARCHAR(45)。

我已成功使用实体框架将图像持久保存到 mysql 中:

public static void PersistCurrentImage(Company company, FileStream logoStream, MyEntities context)
    {
        if (logoStream != null)
        {
            //reading
            byte[] data = new byte[logoStream.Length];
            logoStream.Read(data, 0, Convert.ToInt32(logoStream.Length));
            logoStream.Close();

            //setting image
            company.CompanyLogo = new CompanyLogo();
            company.CompanyLogo.Image = data;
            company.CompanyLogo.Extension = Path.GetExtension(logoStream.Name);
            company.CompanyLogo.Name = Path.GetFileName(logoStream.Name);

            context.SaveChanges();

        }
    }

我想做的是从数据库中获取图像,从中制作一个文件并将其放在剪贴板中,以便稍后我可以粘贴该文件。

我已经寻找了 1 个小时的解决方案,但我似乎可以找到它。先感谢您

4

2 回答 2

1

我用这样的代码取得了成功:

File.WriteAllBytes(@"logo.jpg", company.CompanyLogo.Image.ToArray());
StringCollection paths = new StringCollection();
paths.Add("logo.jpg");
Clipboard.SetFileDropList(paths);

现在文件在剪贴板中,就像您在资源管理器中完成了 ctrl-C 一样。

这假设徽标是 jpg,在我的情况下,图像存储为 Sql Server 的image数据类型。我认为 MySql 的LONGBLOB行为方式相同。请注意,您应该使用完整的路径(为简洁起见,此处省略。

于 2012-04-29T15:39:52.313 回答
0

好的,我已经解决了。首先将图像写入硬盘驱动器,然后将其复制到剪贴板。

public static void CopyLogo(Company company)
    {
        if (company.CompanyLogo != null)
        {
            MemoryStream ms = new MemoryStream(company.CompanyLogo.Image, 0, company.CompanyLogo.Image.Length);

            using (ms)
            {
                //saving image on current project directory
                Image img = Image.FromStream(ms);
                img.Save(Environment.CurrentDirectory+"\\"+ company.CompanyLogo.Name);

                //copying to clipboard
                StringCollection paths = new StringCollection();
                paths.Add(Environment.CurrentDirectory + "\\" + company.CompanyLogo.Name);
                Clipboard.SetFileDropList(paths);
            }

        }
    }
于 2012-04-29T15:19:31.313 回答