скопируйте изображение в буфер обмена и вставьте его в виде файла (vb.net)
Вопрос
У меня есть коробка с картинками, и если я использую 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)