скопировать изображение в буфер обмена и вставить его в файл (vb.net) - PullRequest
3 голосов
/ 11 января 2010

У меня есть окно с картинкой, и если я использую фрагмент ниже:

Clipboard.SetImage(PictureBox.image)

Тогда я могу только вставить изображение в такие вещи, как Paint и MS Word. Я не могу вставить его как файл в папку / рабочий стол.

Итак, как я могу скопировать изображение в буфер обмена, и если оно будет вставлено в папку, оно станет файлом?

Ответы [ 2 ]

5 голосов
/ 11 января 2010

Если вы используете .net и ваша конечная цель - сохранить файл, есть гораздо более простой способ,

Здесь код на C #, перенести его на VB.net не составит труда, просто мне лень это делать :) Во всяком случае, вам нужно сохранить его где-нибудь, прежде чем вы сможете вставить его так ...

Он загружает файл в поле Picture и снова сохраняет его в файл (хром, я знаю) и установите данные буфера обмена как операцию копирования

затем, когда вы вставляете (Ctrl + V), он вставляется.

C#
__
    Bitmap bmp;
    string fileName=@"C:\image.bmp";
    //here I assume you load it from a file, you might get the image from somewhere else, your code may differ</p>

<code>pictureBox1.Image=(Image) Bitmap.FromFile(fileName);
bmp=(Bitmap)pictureBox1.Image;
bmp.Save(@"c:\image2.bmp");

System.Collections.Specialized.StringCollection st = new 
System.Collections.Specialized.StringCollection();
        st.Add(@"c:\image2.bmp");
        System.Windows.Forms.Clipboard.SetFileDropList(st);

и альт пытается вставить в папку файл image2.bmp.

3 голосов
/ 11 января 2010

Вот в основном то, что @Vivek опубликовал, но портировал на VB. Голосуйте за него, если это работает для вас. Что вам нужно понять, так это то, что проводник позволяет вставлять только файлы, а не объекты (в любом случае, AFAIK). Причина в том, что если вы копируете данные изображения в буфер обмена, в каком формате они должны быть вставлены? PNG, BMP, JPG? Какие настройки сжатия? Итак, как сказал @Vivek, вам нужно подумать над этим, создать собственный файл где-нибудь в системе и использовать SetFileDropList, который добавит временный файл в буфер обмена.

'   Add it as an image
    Clipboard.SetImage(PictureBox1.Image)

    'Create a JPG on disk and add the location to the clipboard
    Dim TempName As String = "TempName.jpg"
    Dim TempPath As String = System.IO.Path.Combine(My.Computer.FileSystem.SpecialDirectories.Temp, TempName)
    Using FS As New System.IO.FileStream(TempPath, IO.FileMode.Create, IO.FileAccess.Write, IO.FileShare.Read)
        PictureBox1.Image.Save(FS, System.Drawing.Imaging.ImageFormat.Jpeg)
    End Using
    Dim Paths As New System.Collections.Specialized.StringCollection()
    Paths.Add(TempPath)
    Clipboard.SetFileDropList(Paths)
...