VB .NET - Como incluir um texto e/ou imagem como marca d'água em uma Imagem
Neste artigo eu vou mostrar uma forma de incluir um texto ou uma imagem como marca d'água em uma imagem numa aplicação Windows Forms usando a linguagem VB .NET. |
As marcas d'água são textos ou imagens que aparecem sob o texto de um documento. Elas normalmente adicionam um atrativo ou identificam o status do documento, como marcando um documento como um rascunho ou incluindo um marca de propriedade à imagem.
Neste artigo eu vou criar um projeto exemplo que mostrar como podemos incluir texto ou imagem como marca d'água em uma outra imagem podendo depois salvá-la com a marca d'água inserida.
Recursos Usados :
Criando o projeto no Visual Studio 2013 Express for Windows Desktop
Abra o VS Express 2013 for Windows Desktop e clique em New Project;
A seguir selecione a linguagem Visual VB.NET e o template Windows Forms Application;
Informe o nome MarcaDagua_VBNET e clique no botão OK;
A seguir selecione o formulário padrão form1.vb e inclua, a partir da ToolBox, os seguintes controles:
1 PictureBox - picImagemMarcaDagua
1 PictureBox - picImagemMarcaDagua
1 TextBox - txtTexto
1 Combobox - cboFontes
1 TextBox - txtX
1 TextBox - txtY
1 TextBox - txtTamanho
4 Button - btnSalvarImagem, btnCarregarImagem, btnAplicarTexto, btnAplicarImagem
1 CheckBbox - chkCentralizar
1 SaveFileDialog - svd1
Disponha os controles no formulário conforme a figura abaixo:
Na controle PictureBox picImagemMarcaDagua no topo do formulário você deve incluir uma imagem que será usada como marca d'água em outra imagem.
No meu exemplo eu estou usando o o logotipo Macoratti.net.
Agora vamos definir o código do formulário.
1- No evento Load vamos carregar as fontes instaladas no sistema chamando a rotina carregarFontes:
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
carregarFontes()
End Sub
|
A rotina carregarFontes possui o seguinte código:
Private Sub carregarFontes()
Try
Dim fontes_Instaladas As New InstalledFontCollection
cboFontes.Items.Clear()
For Each font_family As FontFamily In fontes_Instaladas.Families
cboFontes.Items.Add(font_family.Name)
Next font_family
cboFontes.SelectedIndex = 0
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub
|
No evento Click do botão Carregar Imagem temos o código que carrega uma imagem no controle picImagem:
Private Sub btnCarregarImagem_Click(sender As Object, e As EventArgs) Handles btnCarregarImagen.Click
Try
Dim openfiledialog As New OpenFileDialog
If openfiledialog.ShowDialog = DialogResult.OK Then
picImagem.Image = Image.FromFile(openfiledialog.FileName)
End If
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub
|
No evento Click do botão Aplicar Texto inclua o código que obtém o texto, os valores das coordenadas, o tamanho da fonte e a fonte e aplica o texto na imagem carregada:
Private Sub btnAplicarTexto_Click(sender As Object, e As EventArgs) Handles btnAplicarTexto.Click
Try
Dim x As Integer = Convert.ToInt32(txtX.Text)
Dim y As Integer = Convert.ToInt32(txtY.Text)
Dim tam As Integer = Convert.ToInt32(txtTamanho.Text)
Dim NF As New Font(cboFontes.Text, tam, FontStyle.Bold)
Dim NB As New SolidBrush(Color.FromArgb(64, 192, 255, 255))
NB.Color = Color.FromArgb(128, 0, 0, 0)
picImagem.CreateGraphics.DrawString(txtTexto.Text, NF, NB, x, y)
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub
|
No botão Aplicar Imagem temos o código que aplica a imagem definida em picImagemMarcaDagua na imagem centralizando ou não a imagem conforme a seleção do usuário no controle chkCentralizar :
Private Sub btnAplicarImagem_Click(sender As Object, e As EventArgs) Handles btnAplicarImagem.Click
' a imagem que será usada como marca d'agua
Dim bm_marcaDagua As New Bitmap(picImagemMarcaDagua.Image)
' a imagem onde iremos aplicar a marca dágua
Dim bm_Resultado As New Bitmap(picImagem.Image)
'centraliza a marca d'agua
If chkCentralizar.Checked Then
Dim x As Integer = (bm_Resultado.Width - bm_marcaDagua.Width) \ 2
Dim y As Integer = (bm_Resultado.Height - bm_marcaDagua.Height) \ 3
DesenharMarcaDagua(bm_marcaDagua, bm_Resultado, x, y)
Else
'define a marca d'agua em uma posição especifica
Dim x As Integer = Convert.ToInt32(txtX.Text)
Dim y As Integer = Convert.ToInt32(txtY.Text)
DesenharMarcaDagua(bm_marcaDagua, bm_Resultado, x, y)
End If
picImagem.Image = bm_Resultado
End Sub
|
O código da rotina DesenharMarcaDagua que aplica a imagem como marca d'água é visto abaixo:
Private Sub DesenharMarcaDagua(ByVal bm_marcaDagua As Bitmap, ByVal bm_Resultado As Bitmap, ByVal x As Integer, ByVal y As Integer)
Const ALPHA As Byte = 128
' Define o componente Alpha do pixel
Dim clr As Color
For py As Integer = 0 To bm_marcaDagua.Height - 1
For px As Integer = 0 To bm_marcaDagua.Width - 1
clr = bm_marcaDagua.GetPixel(px, py)
bm_marcaDagua.SetPixel(px, py, Color.FromArgb(ALPHA, clr.R, clr.G, clr.B))
Next px
Next py
' Define a marca dagua como transparente
bm_marcaDagua.MakeTransparent(bm_marcaDagua.GetPixel(0, 0))
' Copia o resultado na imagem
Dim gr As Graphics = Graphics.FromImage(bm_Resultado)
gr.DrawImage(bm_marcaDagua, x, y)
End Sub
|
No botão Salvar Imagem temos o código a seguir que salva a imagem resultante:
Private Sub btnSalvarImagem_Click(sender As Object, e As EventArgs) Handles btnSalvarImagem.Click
Try
' a imagem onde iremos aplicar a marca dágua
Dim pic_Resultado As New Bitmap(picImagem.Image)
svd1.ShowDialog()
pic_Resultado.Save(svd1.FileName)
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub
|
Executando o projeto iremos obter o seguinte resultado:
Pegue o projeto completo aqui : MarcaDagua_VBNET.zip
Salmos 8:1 - Ó Senhor, Senhor nosso, quão admirável é o teu nome em toda a terra, pois puseste a tua glória sobre os céus!
Salmos 8:2 - Tu ordenaste força da boca das crianças e dos que mamam, por causa dos teus inimigos, para fazer calar ao inimigo e ao vingador.
Salmos 8:3 - Quando vejo os teus céus, obra dos teus dedos, a lua e as estrelas que preparaste;
Salmos 8:4 - Que é o homem mortal para que te lembres dele? e o filho do homem, para que o visites?
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: