seja bem vindo ao forum eof, caso nao seja cadastrado se cadastre para poder visualizar todo o conteudo ^^

Participe do fórum, é rápido e fácil

seja bem vindo ao forum eof, caso nao seja cadastrado se cadastre para poder visualizar todo o conteudo ^^
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Você não está conectado. Conecte-se ou registre-se

[tutorial] desenhando com canvas (delphi) - 6º parte

Ir para baixo  Mensagem [Página 1 de 1]

Kodo no Kami

Kodo no Kami
master
master

e ae galera essa é 6º parte do tutorial de canvas e delphi, nessa parte vamos carregar imagens dinamicamente na memoria e manipular ela, as imagens que vamos manipular sao os formatos bitmaps (esse formato é o mais facil devido ser so sequencia de bytes correspondente aos pixels, diferente do jpg que tem uma compactação, esse é um dos motivos de uma imagem bmp ser mais de 100x maior que uma jpg), nao precisamos saber como funciona internamente uma imagem para brincar com o canvas existe uma classe que permite manipular imagem do tipo bmp (porem é possivel fazer isso manualmente abrir um arquivo bmp ler o formato e desenhar no canvas correspondente ao formato no arquivo), para a gente carregar uma imagem bmp declaramos e instanciarmos o objeto TBitmap

Código:
procedure TForm1.FormPaint(Sender: TObject);
var highschool: TBitmap;
begin
   highschool := TBitmap.create;
end;

agora usamos o metodo LoadFromFile do objeto TBitmap que instanciamos para carregar a imagem direto de um arquivo, nele passamos como argumento o local do arquivo

Código:
procedure TForm1.FormPaint(Sender: TObject);
var highschool: TBitmap;
begin
   highschool := TBitmap.create;
   highschool.LoadFromFile('c:\users\fts315\desktop\highsdxd.bmp');
end;

ate agora a gente apenas carrego a imagem bitmap para memoria porem nao desenhamos ela, para desenhar usamos o metodo Draw do canvas, passamos como argumento para ele a posição de X e Y e por fim o objeto TBitmap que instanciamos

Código:
procedure TForm1.FormPaint(Sender: TObject);
var highschool: TBitmap;
begin
   highschool := TBitmap.create;
   highschool.LoadFromFile('c:\users\fts315\desktop\highsdxd.bmp');
   Form1.Canvas.Draw(50,50,highschool);
end;

[Tens de ter uma conta e sessão iniciada para poderes visualizar esta imagem]

agora podemos modificar a imagem pintando com os metodos anteriores ou outras imagens por cima dessa (em teoria o photoshop tambem funciona dessa forma), por exemplo deixa eu tentar mudar a cor dos olhos da ashia '-'

Código:
procedure TForm1.FormPaint(Sender: TObject);
var highschool: TBitmap;
begin
   highschool := TBitmap.create;
   highschool.LoadFromFile('c:\users\fts315\desktop\highsdxd.bmp');
   Form1.Canvas.Draw(50,50,highschool);

   Form1.Canvas.Brush.Color := clRed;
   Form1.Canvas.Ellipse(510,201,521,215);
   Form1.Canvas.Ellipse(539,229,546,240);
end;

[Tens de ter uma conta e sessão iniciada para poderes visualizar esta imagem]

nao fico 100% kõdo u.u, poxa da um desconto ne fazer isso por codigo é complicado pra carai deu um trabalho do cao so para achar as posição kkkkk (mentira eu usei uma tecnica aqui para achar isso XD), ok e agora kõdo como salvamos isso em um arquivo bitmap?, para a gente salvar em um arquivo bitmap temos que instanciar outro objeto TBitmap (pq vai ser por ele que vamos salvar), depois especificamos a dimensão (largura e altura dele, ambas deve ser maior ou igual a imagem), depois especificar um retangulo para onde vamos copiar a imagem para dentro do objeto bitmap, e especificar um retangulo da imagem que vai ser copiada que no caso vai ser a do form, vamos por partes primeiro instanciamos o novo objeto TBitmap

Código:
procedure TForm1.FormPaint(Sender: TObject);
var highschool: TBitmap;
    highsalvar: TBitmap;
begin
   highschool := TBitmap.create;
   highsalvar := TBitmap.Create;

   highschool.LoadFromFile('c:\users\fts315\desktop\highsdxd.bmp');
   Form1.Canvas.Draw(50,50,highschool);

   Form1.Canvas.Brush.Color := clRed;
   Form1.Canvas.Ellipse(510,201,521,215);
   Form1.Canvas.Ellipse(539,229,546,240);
end;

agora especificamos o tamanho da nossa imagem dentro do objeto TBitmap (como estamos usando o form para pintar podemos usar os atributos do form para descobrir a dimensão do form)

Código:
procedure TForm1.FormPaint(Sender: TObject);
var highschool: TBitmap;
    highsalvar: TBitmap;
begin
   highschool := TBitmap.create;
   highsalvar := TBitmap.create;

   highschool.LoadFromFile('c:\users\fts315\desktop\highsdxd.bmp');
   Form1.Canvas.Draw(50,50,highschool);

   Form1.Canvas.Brush.Color := clRed;
   Form1.Canvas.Ellipse(510,201,521,215);
   Form1.Canvas.Ellipse(539,229,546,240);

   highsalvar.Width := Form1.Width;
   highsalvar.Height := Form1.Height;
end;

agora criamos dois objetos TRect (lembra dele?, ele faz retangulo, caso nao lembra da uma olhada no tutorial nº2), o primeiro usamos para especificar o tamanho da imagem que vai ficar dentro do bitmap (vamos usar os atributos do form para ter uma base do tamanho)

Código:
procedure TForm1.FormPaint(Sender: TObject);
var highschool: TBitmap;
    highsalvar: TBitmap;
    imgbmp: TRect;
    imgform: TRect;
begin
   highschool := TBitmap.create;
   highsalvar := TBitmap.create;

   highschool.LoadFromFile('c:\users\fts315\desktop\highsdxd.bmp');
   Form1.Canvas.Draw(50,50,highschool);

   Form1.Canvas.Brush.Color := clRed;
   Form1.Canvas.Ellipse(510,201,521,215);
   Form1.Canvas.Ellipse(539,229,546,240);

   highsalvar.Width := Form1.Width;
   highsalvar.Height := Form1.Height;

   imgbmp.Left := 0;
   imgbmp.Right := Form1.Width;
   imgbmp.Top := 0;
   imgbmp.Bottom := Form1.Height;
end;

agora configuramos o segundo TRect com os atributos setados igual o primeiro (como ambos rect nesse caso tem a mesma dimensão a gente poderia usar apenas um TRect para os dois, porem as vezes temos que salvar apenas uma parte por exemplo a cabeça da ashia entao usaria um TRect para posição onde ta a cabeça e outro onde salvaria dentro do objeto TBitmap)

Código:
procedure TForm1.FormPaint(Sender: TObject);
var highschool: TBitmap;
    highsalvar: TBitmap;
    imgbmp: TRect;
    imgform: TRect;
begin
   highschool := TBitmap.create;
   highsalvar := TBitmap.create;

   highschool.LoadFromFile('c:\users\fts315\desktop\highsdxd.bmp');
   Form1.Canvas.Draw(50,50,highschool);

   Form1.Canvas.Brush.Color := clRed;
   Form1.Canvas.Ellipse(510,201,521,215);
   Form1.Canvas.Ellipse(539,229,546,240);

   highsalvar.Width := Form1.Width;
   highsalvar.Height := Form1.Height;

   imgbmp.Left := 0;
   imgbmp.Right := Form1.Width;
   imgbmp.Top := 0;
   imgbmp.Bottom := Form1.Height;

   imgform.Left := 0;
   imgform.Right := Form1.Width;
   imgform.Top := 0;
   imgform.Bottom := Form1.Height;
end;

com as posição setadas agora so falta copiar de um canvas de um objeto para o canvas do outro objeto (no caso do canvas do Form para o canvas do objeto TBitmap), para a gente copiar usamos o metodo CopyRect do canvas dentro do objeto para onde vai ser copiado no caso TBitmap, nele passamos como argumento o TRect do bitmap, depois o argumento do canvas do objeto da onde vamos copiar (Form.canvas), e por fim o outro TRect)

Código:
procedure TForm1.FormPaint(Sender: TObject);
var highschool: TBitmap;
    highsalvar: TBitmap;
    imgbmp: TRect;
    imgform: TRect;
begin
   highschool := TBitmap.create;
   highsalvar := TBitmap.create;

   highschool.LoadFromFile('c:\users\fts315\desktop\highsdxd.bmp');
   Form1.Canvas.Draw(50,50,highschool);

   Form1.Canvas.Brush.Color := clRed;
   Form1.Canvas.Ellipse(510,201,521,215);
   Form1.Canvas.Ellipse(539,229,546,240);

   highsalvar.Width := Form1.Width;
   highsalvar.Height := Form1.Height;

   imgbmp.Left := 0;
   imgbmp.Right := Form1.Width;
   imgbmp.Top := 0;
   imgbmp.Bottom := Form1.Height;

   imgform.Left := 0;
   imgform.Right := Form1.Width;
   imgform.Top := 0;
   imgform.Bottom := Form1.Height;

   highsalvar.Canvas.CopyRect(imgbmp,Form1.Canvas,imgform);
end;

ja ta copiado dentro do canvas do objeto TBitmap agora basta usar o metodo SaveToFile e passar como argumento o local onde vai salvar o arquivo e pronto (ou quase)

Código:
procedure TForm1.FormPaint(Sender: TObject);
var highschool: TBitmap;
    highsalvar: TBitmap;
    imgbmp: TRect;
    imgform: TRect;
begin
   highschool := TBitmap.create;
   highsalvar := TBitmap.create;

   highschool.LoadFromFile('c:\users\fts315\desktop\highsdxd.bmp');
   Form1.Canvas.Draw(50,50,highschool);

   Form1.Canvas.Brush.Color := clRed;
   Form1.Canvas.Ellipse(510,201,521,215);
   Form1.Canvas.Ellipse(539,229,546,240);

   highsalvar.Width := Form1.Width;
   highsalvar.Height := Form1.Height;

   imgbmp.Left := 0;
   imgbmp.Right := Form1.Width;
   imgbmp.Top := 0;
   imgbmp.Bottom := Form1.Height;

   imgform.Left := 0;
   imgform.Right := Form1.Width;
   imgform.Top := 0;
   imgform.Bottom := Form1.Height;

   highsalvar.Canvas.CopyRect(imgbmp,Form1.Canvas,imgform);
   highsalvar.SaveToFile('c:\users\fts315\desktop\highkodo.bmp');
end;

[Tens de ter uma conta e sessão iniciada para poderes visualizar esta imagem]

como podemos ver na imagem acima ele gero nossa imagem bmp (o primeiro ali é visualizador de img do windows e o segundo e soft), porem o final dela fico meio deformado (meio branco), isso pq o form pode ser um pouco maior do que é mostrado (isso eu nao tenho certeza so to deduzindo), para arrumar isso basta diminuir um pouco o tamanho da bitmap (width e height)

Código:
procedure TForm1.FormPaint(Sender: TObject);
var highschool: TBitmap;
    highsalvar: TBitmap;
    imgbmp: TRect;
    imgform: TRect;
begin
   highschool := TBitmap.create;
   highsalvar := TBitmap.create;

   highschool.LoadFromFile('c:\users\fts315\desktop\highsdxd.bmp');
   Form1.Canvas.Draw(50,50,highschool);

   Form1.Canvas.Brush.Color := clRed;
   Form1.Canvas.Ellipse(510,201,521,215);
   Form1.Canvas.Ellipse(539,229,546,240);

   highsalvar.Width := Form1.Width - 20;
   highsalvar.Height := Form1.Height -45;

   imgbmp.Left := 0;
   imgbmp.Right := Form1.Width;
   imgbmp.Top := 0;
   imgbmp.Bottom := Form1.Height;

   imgform.Left := 0;
   imgform.Right := Form1.Width;
   imgform.Top := 0;
   imgform.Bottom := Form1.Height;

   highsalvar.Canvas.CopyRect(imgbmp,Form1.Canvas,imgform);
   highsalvar.SaveToFile('c:\users\fts315\desktop\highkodo.bmp');
end;

[Tens de ter uma conta e sessão iniciada para poderes visualizar esta imagem]

pronto agora na imagem acima so ta salvo oque estava dentro do form que é cor cinza e a imagem da ashia, bom galera esse tutorial continua em outra parte ^^

by kõdo no kami

https://endoffile.umforum.net

Ir para o topo  Mensagem [Página 1 de 1]

Permissões neste sub-fórum
Não podes responder a tópicos