WPF -
Realizando operações com o ClipBoard - II
![]() |
No artigo de hoje vou mostrar como podemos realizar as operações de copiar e colar envolvendo o ClipBoard. |
Na
primeira parte deste artigo eu
mostrei como podemos copiar e colar textos para a
área de transferência do Windows em uma
aplicação WPF, agora vou mostrar como podemos copiar e colar imagens para e a
partir do ClipBoard.
Recursos usados :
Copiando Imagens de e para o ClipBoard
Abra o projeto Usando_ClipBoard criado no artigo anterior e no menu PROJECT clique em Add Window e informe o nome WindowImagem.xaml;
A seguir abra o arquivo WindowImagem.xaml e vamos usar os seguintes controles a partir da ToolBox:
1 Label - Content = "Arquivo"
1 Label - Name= lblArquivo
1 Button - Name= btnCarregarImagem , Click="btnCarregarImagem_Click"
1 Image - Name= imgArquivo
1 Button - Content = "Copiar" Name="btnCopiar", Click="btnCopiar_Click"
1 Button - Content = "Colar" Name="btnColar", Click="btnColar_Click"
Para isso inclua neste arquivo o código XAML abaixo:
<Window x:Class="WindowImagem"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Copiando e Colando Imagens" Height="311" Width="537">
<Grid>
<Label Content="Arquivo" HorizontalAlignment="Left" Margin="20,10,0,0" VerticalAlignment="Top" Width="64"/>
<Label x:Name="lblArquivo" Content="" HorizontalAlignment="Left" Margin="89,10,0,0" Background="Aqua" VerticalAlignment="Top" Width="326"/>
<Button x:Name="btnCarregarImagem" Content="Procurar" HorizontalAlignment="Left" Margin="420,10,0,0" VerticalAlignment="Top" Width="75" Height="26" Click="btnCarregarImagem_Click"/>
<Image x:Name="imgArquivo" HorizontalAlignment="Left" Height="203" Margin="89,52,0,0" VerticalAlignment="Top" Width="326" Opacity="0.5"/>
<Button x:Name="btnCopiar" Content="Copiar" HorizontalAlignment="Left" Margin="420,236,0,0" VerticalAlignment="Top" Width="75" Height="26" Click="btnCopiar_Click"/>
<Button x:Name="btnColar" Content="Colar" HorizontalAlignment="Left" Margin="420,199,0,0" VerticalAlignment="Top" Width="75" Height="27" Click="btnColar_Click"/>
</Grid>
</Window> |
O leiaute da aplicação deverá esta conforme a figura abaixo:
No evento Click do botão Procurar no arquivo WindowImagem.xaml.vb inclua o código a seguir para abrir a caixa de diálogo OpenFileFialog e permitir a seleção de uma imagem pelo usuário:
Private Sub btnCarregarImagem_Click(sender As Object, e As RoutedEventArgs)
Dim dlg As New OpenFileDialog()
dlg.InitialDirectory = "c:\dados"
dlg.Filter = "Imagens (*.jpg)|*.jpg|Todos (*.*)|*.*"
dlg.RestoreDirectory = True
If dlg.ShowDialog() = System.Windows.Forms.DialogResult.OK Then
Else
Dim arquivoSelecionado As String = dlg.FileName
lblArquivo.Content = arquivoSelecionado
Dim bitmap As New BitmapImage()
bitmap.BeginInit()
bitmap.UriSource = New Uri(arquivoSelecionado)
bitmap.EndInit()
imgArquivo.Source = bitmap
End If
End Sub
|
Neste código após selecionar a imagem estamos criando objeto da classe BitMapImage que Fornece um BitmapSource especializado que é otimizado para carregar imagens usando o Extensible Application Markup Language (XAML).
A seguir definimos a fonte URi para o BitmapImage como sendo o arquivo selecionado e exibimos o arquivo no controle imgArquivo usando a propriedade Source.
A seguir no evento Click do botão Copiar inclua o código abaixo:
Private Sub btnCopiar_Click(sender As Object, e As RoutedEventArgs)
Try
Dim width As Double = imgArquivo.ActualWidth
Dim height As Double = imgArquivo.ActualHeight
Dim bmpCopied As New RenderTargetBitmap(CInt(Math.Round(width)), CInt(Math.Round(height)), 96, 96, PixelFormats.[Default])
Dim dv As New DrawingVisual()
Using dc As DrawingContext = dv.RenderOpen()
Dim vb As New VisualBrush(imgArquivo)
dc.DrawRectangle(vb, Nothing, New Rect(New Point(), New Size(width, height)))
End Using
bmpCopied.Render(dv)
Clipboard.SetImage(bmpCopied)
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub
|
Para concluir, inclua o código abaixo no evento Click do botão Colar :
Private Sub btnColar_Click(sender As Object, e As RoutedEventArgs)
Try
If Clipboard.ContainsImage() Then
Dim clipboardData As System.Windows.Forms.IDataObject = System.Windows.Forms.Clipboard.GetDataObject()
If clipboardData IsNot Nothing Then
If clipboardData.GetDataPresent(System.Windows.Forms.DataFormats.Bitmap) Then
Dim bitmap As System.Drawing.Bitmap = DirectCast(clipboardData.GetData(System.Windows.Forms.DataFormats.Bitmap), System.Drawing.Bitmap)
imgArquivo.Source = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(bitmap.GetHbitmap(), IntPtr.Zero,
Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions())
End If
End If
End If
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub
|
Agora vamos testar...
Execute o projeto e clique no botão Procurar e selecione uma imagem qualquer exibindo no controle Image como vemos na figura abaixo:
1- Copiando do programa para o ClibBoard
Para copiar para o ClipBoard basta clicar no botão Copiar e a seguir abrir qualquer editor de arquivos. No exemplo eu estou abrindo o Paint e selecionando a opção Colar do menu para exibir a imagem que foi copiada para o ClipBoard no Paint:
2- Colando do ClipBoard para o programa
Agora abra o Paint e carregue uma imagem conforme mostra a figura abaixo. Selecione a imagem e depois clique na opção Copiar do menu. Isso irá copiar a imagem para a área de transferência.
Agora execute o projeto e a seguir clique no botão Colar e você verá a imagem exibida no controle Image (imgArquivo) da janela WindowImagem:
Pegue o projeto
completo aqui:
Usando_ClipBoard_1.zip
Porque pela graça sois salvos, por meio
da fé; e isto não vem de vós, é dom de Deus.
Não vem das obras, para que ninguém se glorie;
Efésios 2:8,9
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? |
Gostou ?
Compartilhe no Facebook
Compartilhe no Twitter
Referências: