C# -
Convertendo arquivos textos para imagem (Windows Forms)
![]() |
No artigo de hoje vou mostrar como podemos salvar arquivos textos no formato imagem em um projeto Windows Forms usando a linguagem C#. |
Este é um artigo onde iremos rever diversos conceitos básicos da linguagem C# como : usar as caixas de diálogo OpenFileDialog e SaveFileDialog, Abrir arquivos textos, Salvar arquivos textos e Salvar arquivos imagens.
Além disso vamos aprender como podemos converter um texto para um arquivo imagem com opções para salvar a imagem nos formatos : JPG, BMP (Padrão) e GIF.
Para saber mais ou lembrar da teoria veja nas referências os artigos sobre os tópicos que estamos revendo.
Recursos usados :
Criando o projeto exemplo no VS 2013 Express Edition
Abra o VS 2013 Express for Windows desktop e clique em New Project;
A seguir selecione Visual C# -> Windows Forms Application;
Informe o nome Converter_Texto_Imagem e clique no botão OK;
No formulário padrão form1.cs inclua a partir da ToolBox os seguintes controles:
Defina o seguinte leiaute no formulário form1.cs:
![]() |
No menu PROJECT clique em Add Class e informe o nome ConverteTexto.cs. Nessa classe iremos definir os métodos para converter o texto para imagem.
A seguir inclua o seguinte código na classe ConverteTexto :
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Text;
namespace Converter_Texto_Imagem
{
public class ConverteTexto
{
public static Bitmap CriarImagemBitMap(string textoImagem, string fonte, int tamanho)
{
try
{
Bitmap objBmpImage = new Bitmap(1, 1);
int intWidth = 0;
int intHeight = 0;
// Cria o objeto Font para desenha o texto da imagem
Font objFont = new Font(fonte, tamanho, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Pixel);
// Cria o objeto grafico para medir a largura e altura do texto
Graphics objGraphics = Graphics.FromImage(objBmpImage);
// aqui determinamos o tamanho do bitmap
intWidth = (int)objGraphics.MeasureString(textoImagem, objFont).Width;
intHeight = (int)objGraphics.MeasureString(textoImagem, objFont).Height;
// Cria o bmpImage novamente com o tamanho correto para o texto e fonte
objBmpImage = new Bitmap(objBmpImage, new Size(intWidth, intHeight));
// Adiciona cores ao novo bitmap.
objGraphics = Graphics.FromImage(objBmpImage);
// Define a cor de fundo
objGraphics.Clear(Color.White);
objGraphics.SmoothingMode = SmoothingMode.AntiAlias;
objGraphics.TextRenderingHint = TextRenderingHint.AntiAlias;
objGraphics.DrawString(textoImagem, objFont, new SolidBrush(Color.FromArgb(102, 102, 102)), 0, 0);
objGraphics.Flush();
return (objBmpImage);
}
catch
{
throw;
}
}
public static Bitmap Converte_Texto_Para_Imagem(string txt, string fontname, int fontsize)
{
try
{
//cria a imagem bitmap
Bitmap bmp = new Bitmap(1, 1);
//O método FromImage cria um novo Graphics a partir da imagem definida
Graphics graphics = Graphics.FromImage(bmp);
// Cria um objeto Font para desenhar o texto da imagem
Font font = new Font(fontname, fontsize);
// Instancia o objeto Bitmap imagem novamente com o tamanho correto para o texto e fonte
SizeF stringSize = graphics.MeasureString(txt, font);
bmp = new Bitmap(bmp, (int)stringSize.Width, (int)stringSize.Height);
graphics = Graphics.FromImage(bmp);
// Aqui temos uma outra possibilidade
// bmp = new Bitmap(bmp, new Size((int)graphics.MeasureString(txt, font).Width, (int)graphics.MeasureString(txt, font).Height));
//Desenha o texto com o formato definido
graphics.DrawString(txt, font, Brushes.Blue, 0, 0);
font.Dispose();
graphics.Flush();
graphics.Dispose();
return bmp;
}
catch
{
throw;
}
}
public static Bitmap ConvertTextToImage(string txt, string fontname, int fontsize, Color bgcolor, Color fcolor, int width, int Height)
{
try
{
//cria o bitmap
Bitmap bmp = new Bitmap(width, Height);
using (Graphics graphics = Graphics.FromImage(bmp))
{
//define a fonte e escreve o texto
Font font = new Font(fontname, fontsize);
graphics.FillRectangle(new SolidBrush(bgcolor), 0, 0, bmp.Width, bmp.Height);
graphics.DrawString(txt, font, new SolidBrush(fcolor), 0, 0);
graphics.Flush();
font.Dispose();
graphics.Dispose();
}
return bmp;
}
catch
{
throw;
}
}
}
}
|
Nesta classe temos 3 métodos para converter texto para imagem. Todos eles fazem a mesma coisa com pequenas variações.
Você pode escolher qualquer um deles para realizar a conversão e pode também alterá-los ou escolher um e remover os demais.
Neste artigo eu vou usar apenas um como exemplo e os demais ficam como uma alternativa.
Definindo o código do formulário
A primeira coisa que temos que fazer é definir os namespaces usados no formulário:
using
System;Agora vamos implementar no formulário o código no evento Click de cada um dos botões de comando:
1- Botão Abrir Arquivo
private void btnAbrirArquivo_Click(object sender, EventArgs e)
{
OpenFileDialog AbrirComo = new OpenFileDialog();
DialogResult caminho = new DialogResult();
StreamReader fluxoTexto = null;
string Arquivo = null;
AbrirComo.Title = "Abrir como";
AbrirComo.FileName = "Nome Arquivo";
AbrirComo.InitialDirectory = @"C:\dados";
AbrirComo.Filter = "Arquivos Textos (*.txt)|*.txt";
caminho = AbrirComo.ShowDialog();
Arquivo = AbrirComo.FileName;
try
{
if (!File.Exists(Arquivo))
{
MessageBox.Show("Operação cancelada ou arquivo inválido", "Arquivo", MessageBoxButtons.OK);
}
else
{
fluxoTexto = new StreamReader(Arquivo);
txtTexto.Text = fluxoTexto.ReadToEnd();
fluxoTexto.Close();
}
}
catch(Exception ex)
{
MessageBox.Show("Erro : " + ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
|
Este código usa o componente OpenFileDialog() e permite ao usuário abrir um arquivo texto exibindo na caixa de texto txtTexto.
2 - botão Salvar Arquivo
private void btnSalvarTexto_Click(object sender, EventArgs e)
{
SaveFileDialog salvarComo = new SaveFileDialog();
DialogResult caminho;
StreamWriter fluxoTexto = null;
string Arquivo = null;
try
{
salvarComo.CheckFileExists = false;
salvarComo.Title = "Arquivos Textos |*.txt |";
salvarComo.InitialDirectory = @"C:\dados";
caminho = salvarComo.ShowDialog();
Arquivo = salvarComo.FileName;
if (string.IsNullOrWhiteSpace(Arquivo))
{
MessageBox.Show("Operação Cancelada ou Arquivo Inválido", "Salvar Como", MessageBoxButtons.OK);
}
else
{
fluxoTexto = new StreamWriter(Arquivo);
fluxoTexto.Write(txtTexto.Text);
fluxoTexto.Close();
}
}
catch(Exception ex)
{
MessageBox.Show("Erro : " + ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
|
Neste código estamos usando uma caixa de diálogo SaveFileDialog() para que o usuário possa salvar o arquivo texto.
3 - botão Gerar Imagem
private void btnGerarImagem_Click(object sender, EventArgs e)
{
try
{
picImagem.Image = ConverteTexto.CriarImagemBitMap(txtTexto.Text,"Arial",11);
//picImagem.Image = ConverteTexto.Converte_Texto_Para_Imagem(txtTexto.Text,"Verdana",10);
//picImagem.Image = ConverteTexto.ConvertTextToImage(txtTexto.Text, "Bookman Old Style", 10, Color.White, Color.Blue, txtTexto.Width, txtTexto.Height);
//picImagem.Image = ConverteTexto.ConvertTextToImage(txtTexto.Text, "Times New Roman", 10, Color.White, Color.Black, 700,500);
}
catch (Exception ex)
{
MessageBox.Show("Erro : " + ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
|
O código acima usa os métodos da classe ConverteTexto para converter o texto para imagem. No código estou dando exemplo de como chamar todos os métodos definidos.
4 - botão Salvar Imagem
private void btnSalvarImagem_Click(object sender, EventArgs e)
{
SaveFileDialog saveFileDialog1 = new SaveFileDialog();
saveFileDialog1.Filter = "JPeg Image|*.jpg|Bitmap Image|*.bmp|Gif Image|*.gif";
saveFileDialog1.FilterIndex = 2; //define o padrão como sendo bitmap
saveFileDialog1.Title = "Salvar arquivo imagem";
saveFileDialog1.FileName = "Mac_" + DateTime.Now.Millisecond.ToString();
saveFileDialog1.ShowDialog();
try
{
// Se o nome do arquivo não for vazio abre para salvar
if (!string.IsNullOrWhiteSpace(saveFileDialog1.FileName))
{
if (picImagem.Image == null)
{
MessageBox.Show("Arquivo Imagem inválido", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
else
{
// Salva a imagem via FileStream criado pelo método OpenFile
FileStream fs = (FileStream)saveFileDialog1.OpenFile();
// Salva a imagem no formato (ImageFormat) apropriado
// baseado no tipo de arquivo selecionado na caixa de dialog
// A propriedade FilterIndex inicia como valor 1
switch (saveFileDialog1.FilterIndex)
{
case 1:
this.picImagem.Image.Save(fs, ImageFormat.Jpeg);
break;
case 2:
this.picImagem.Image.Save(fs, ImageFormat.Bmp);
break;
case 3:
this.picImagem.Image.Save(fs, ImageFormat.Gif);
break;
}
MessageBox.Show("Arquivo imagem salvo com sucesso", "Imagem", MessageBoxButtons.OK, MessageBoxIcon.Information);
//fecha arquivo
fs.Close();
}
}
else
{
MessageBox.Show("Arquivo inválido", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
catch (Exception ex)
{
MessageBox.Show("Erro : " + ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
|
Esse código usa a caixa de diálogo SaveFileDialog para salvar a imagem convertida e exibida no controle PictureBox (picImagem) para os formatos JPG, BMP ou GIF conforme definido pela seleção do usuário na caixa de diálogo.
Executando o projeto e escolhendo um texto para converter temos o seguinte resultado:
O exemplo funciona bem para arquivos textos pequenos mas você pode incrementar o projeto estendendo suas funcionalidades.
Pegue o projeto completo aqui:
Converter_Texto_Imagem.zip
(Disse Jesus) Não crês
tu que eu estou no Pai, e que o Pai está em mim? As palavras que eu vos digo não
as digo de mim mesmo, mas o Pai, que está em mim, é quem faz as obras.
João 14:10
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:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
TreeView - Arrastar e Soltar (Drag and Drop) - Macoratti.net
C # - Tratando arquivos textos - Inserindo texto em uma linha