如何从数据库中读取图形图像并将其作为文件粘贴到剪贴板
本文关键字:文件 剪贴板 数据库 读取 图形图像 | 更新日期: 2023-09-27 18:32:43
我有一个包含以下列的数据库表: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();
}
}
我想做的是从数据库中获取图像,从中制作一个文件并将其放在剪贴板中,以便稍后我可以粘贴该文件。
我已经寻找了一个小时的解决方案,但我似乎可以找到它。提前感谢您
我在这样的代码上取得了成功:
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
的行为方式相同。请注意,您应该使用完整的路径(为简洁起见,此处省略。
好的,我已经解决了。首先将图像写入硬盘驱动器,然后将其复制到剪贴板。
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);
}
}
}