скопируйте изображение в буфер обмена и вставьте его в виде файла (vb.net)

StackOverflow https://stackoverflow.com/questions/2041710

Вопрос

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

Clipboard.SetImage(PictureBox.image)

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

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

Это было полезно?

Решение

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

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

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

затем, когда вы вставляете (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

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); </pre>

и viola пытается вставить в папку файл image2.bmp, который будет вставлен.

Другие советы

Вот, по сути, то, что опубликовал @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)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top