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データ型として保存されています。LONGBLOBMySqlも同じように動作すると思います。完全なパスを使用する必要があることに注意してください (簡潔にするためにここでは省略します。

于 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 に答える