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: