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
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
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
[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 '-'
[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
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)
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)
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)
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)
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)
[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)
[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
- 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