Difference between revisions of "BGRABitmap tutorial 2/es"
m (Text replace - "delphi>" to "syntaxhighlight>") |
|||
Line 15: | Line 15: | ||
Agrega una variable privada a la forma principal para guardar la imágen: | Agrega una variable privada a la forma principal para guardar la imágen: | ||
− | < | + | <syntaxhighlight> TForm1 = class(TForm) |
private | private | ||
{ private declarations } | { private declarations } | ||
Line 21: | Line 21: | ||
public | public | ||
{ public declarations } | { public declarations } | ||
− | end; </ | + | end; </syntaxhighlight> |
Carga la imágen cuando la forma es creada. Para hacer esto haz doble clic en la forma, un procedimiento debería aparecer en el editor de código. Agrega la instrucción de cargado : | Carga la imágen cuando la forma es creada. Para hacer esto haz doble clic en la forma, un procedimiento debería aparecer en el editor de código. Agrega la instrucción de cargado : | ||
− | < | + | <syntaxhighlight>procedure TForm1.FormCreate(Sender: TObject); |
begin | begin | ||
image := TBGRABitmap.Create('image.png'); | image := TBGRABitmap.Create('image.png'); | ||
− | end; </ | + | end; </syntaxhighlight> |
=== Dibuja el bitmap === | === Dibuja el bitmap === | ||
Line 34: | Line 34: | ||
Añade un manejador OnPaint. Para hacer esto, selecciona la forma principal, luego ve al inspector de objetos, en la pestaña de eventos y haz doble clic en la linea OnPaint. Luego, agrega el código de dibujo : | Añade un manejador OnPaint. Para hacer esto, selecciona la forma principal, luego ve al inspector de objetos, en la pestaña de eventos y haz doble clic en la linea OnPaint. Luego, agrega el código de dibujo : | ||
− | < | + | <syntaxhighlight>procedure TForm1.FormPaint(Sender: TObject); |
begin | begin | ||
image.Draw(Canvas,0,0,True); | image.Draw(Canvas,0,0,True); | ||
− | end; </ | + | end; </syntaxhighlight> |
Fijate que el último parámetro está establecido en 'True' (verdadero) que sinifica opaco. Si quieres tomar los píxeles transparentes en cuenta, codificados en el canal alpha, debes usar 'False'. Pero puede ser lento usar dibujo transparente en un 'canvas' (papel) estándar, entonces si no es necesario usa dibujo opaco solamente. | Fijate que el último parámetro está establecido en 'True' (verdadero) que sinifica opaco. Si quieres tomar los píxeles transparentes en cuenta, codificados en el canal alpha, debes usar 'False'. Pero puede ser lento usar dibujo transparente en un 'canvas' (papel) estándar, entonces si no es necesario usa dibujo opaco solamente. | ||
Line 45: | Line 45: | ||
Finalmente deberías obtener algo como esto : | Finalmente deberías obtener algo como esto : | ||
− | < | + | <syntaxhighlight>unit UMain; |
{$mode objfpc}{$H+} | {$mode objfpc}{$H+} | ||
Line 88: | Line 88: | ||
{$I UMain.lrs} | {$I UMain.lrs} | ||
− | end.</ | + | end.</syntaxhighlight> |
=== Ejecuta el programa === | === Ejecuta el programa === | ||
Line 100: | Line 100: | ||
Quizás quieras centrar la imágen en la forma. Para hacer esto, modifica el procedimiento FormPaint : | Quizás quieras centrar la imágen en la forma. Para hacer esto, modifica el procedimiento FormPaint : | ||
− | < | + | <syntaxhighlight>procedure TForm1.FormPaint(Sender: TObject); |
var ImagePos: TPoint; | var ImagePos: TPoint; | ||
begin | begin | ||
Line 111: | Line 111: | ||
image.Draw(Canvas,ImagePos.X,ImagePos.Y,True); | image.Draw(Canvas,ImagePos.X,ImagePos.Y,True); | ||
− | end;</ | + | end;</syntaxhighlight> |
Para computar la posición, necesitamos calcular el espacio entre la imágen y el borde izquierdo (coordenada X) y el espacio entre la imágen y el borde superior (coordenada Y). La expresion ClientWidth - Image.Width regresa el espacio horizontal disponible, y si lo dividimos por dos obtenemos el margen izquierdo. | Para computar la posición, necesitamos calcular el espacio entre la imágen y el borde izquierdo (coordenada X) y el espacio entre la imágen y el borde superior (coordenada Y). La expresion ClientWidth - Image.Width regresa el espacio horizontal disponible, y si lo dividimos por dos obtenemos el margen izquierdo. | ||
Line 123: | Line 123: | ||
Para estirar la imágen, necesitamos crear una imágen temporalmente estirada : | Para estirar la imágen, necesitamos crear una imágen temporalmente estirada : | ||
− | < | + | <syntaxhighlight>procedure TForm1.FormPaint(Sender: TObject); |
var stretched: TBGRABitmap; | var stretched: TBGRABitmap; | ||
begin | begin | ||
Line 129: | Line 129: | ||
stretched.Draw(Canvas,0,0,True); | stretched.Draw(Canvas,0,0,True); | ||
stretched.Free; | stretched.Free; | ||
− | end;</ | + | end;</syntaxhighlight> |
Por defecto, esto usa el estiramiento fino, pero puedes precisar si quieres usar el estiramiento simple (mas rápido) : | Por defecto, esto usa el estiramiento fino, pero puedes precisar si quieres usar el estiramiento simple (mas rápido) : | ||
− | < | + | <syntaxhighlight>stretched := image.Resample(ClientWidth, ClientHeight, rmSimpleStretch) as TBGRABitmap;</syntaxhighlight> |
[[BGRABitmap tutorial/es|Primer tutoría]] | [[BGRABitmap tutorial 3/es|Siguiente tutoría (dibujando con el ratón)]] | [[BGRABitmap tutorial/es|Primer tutoría]] | [[BGRABitmap tutorial 3/es|Siguiente tutoría (dibujando con el ratón)]] | ||
[[Category:Graphics/es]] | [[Category:Graphics/es]] |
Revision as of 14:53, 24 March 2012
│ Deutsch (de) │ English (en) │ español (es) │ français (fr) │ русский (ru) │
Home | Tutorial 1 | Tutorial 2 | Tutorial 3 | Tutorial 4 | Tutorial 5 | Tutorial 6 | Tutorial 7 | Tutorial 8 | Tutorial 9 | Tutorial 10 | Tutorial 11 | Tutorial 12 | Edit
Esta tutoría muestra como cargar una imágen y dibujarla en una forma.
Crear un nuevo proyecto
Crea un nuevo proyecto y agrega referencias a BGRABitmap de la misma forma que se explica en la primer tutoría.
Carga el bitmap
Copia una imagen al directorio de tu proyecto. Supongamos que su nombre es image.png.
Agrega una variable privada a la forma principal para guardar la imágen:
TForm1 = class(TForm)
private
{ private declarations }
image: TBGRABitmap;
public
{ public declarations }
end;
Carga la imágen cuando la forma es creada. Para hacer esto haz doble clic en la forma, un procedimiento debería aparecer en el editor de código. Agrega la instrucción de cargado :
procedure TForm1.FormCreate(Sender: TObject);
begin
image := TBGRABitmap.Create('image.png');
end;
Dibuja el bitmap
Añade un manejador OnPaint. Para hacer esto, selecciona la forma principal, luego ve al inspector de objetos, en la pestaña de eventos y haz doble clic en la linea OnPaint. Luego, agrega el código de dibujo :
procedure TForm1.FormPaint(Sender: TObject);
begin
image.Draw(Canvas,0,0,True);
end;
Fijate que el último parámetro está establecido en 'True' (verdadero) que sinifica opaco. Si quieres tomar los píxeles transparentes en cuenta, codificados en el canal alpha, debes usar 'False'. Pero puede ser lento usar dibujo transparente en un 'canvas' (papel) estándar, entonces si no es necesario usa dibujo opaco solamente.
Código
Finalmente deberías obtener algo como esto :
unit UMain;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
BGRABitmap, BGRABitmapTypes;
type
{ TForm1 }
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormPaint(Sender: TObject);
private
{ private declarations }
image: TBGRABitmap;
public
{ public declarations }
end;
var
Form1: TForm1;
implementation
{ TForm1 }
procedure TForm1.FormCreate(Sender: TObject);
begin
image := TBGRABitmap.Create('image.png');
end;
procedure TForm1.FormPaint(Sender: TObject);
begin
image.Draw(Canvas,0,0,True);
end;
initialization
{$I UMain.lrs}
end.
Ejecuta el programa
Deberías ver una forma con una imágen dibujada en ella en la esquina superior-izquierda.
Centrar la imágen
Quizás quieras centrar la imágen en la forma. Para hacer esto, modifica el procedimiento FormPaint :
procedure TForm1.FormPaint(Sender: TObject);
var ImagePos: TPoint;
begin
ImagePos := Point( (ClientWidth - Image.Width) div 2,
(ClientHeight - Image.Height) div 2 );
// test de posición negativa
if ImagePos.X < 0 then ImagePos.X := 0;
if ImagePos.Y < 0 then ImagePos.Y := 0;
image.Draw(Canvas,ImagePos.X,ImagePos.Y,True);
end;
Para computar la posición, necesitamos calcular el espacio entre la imágen y el borde izquierdo (coordenada X) y el espacio entre la imágen y el borde superior (coordenada Y). La expresion ClientWidth - Image.Width regresa el espacio horizontal disponible, y si lo dividimos por dos obtenemos el margen izquierdo.
El resultado puede ser negativo si la imágen es mas grande que el ancho del cliente. En este caso, el margen es establecido como cero.
Puedes ejecutar el programa y ver si funciona. Fijate que sucede si removes el test de posición negativa.
Estirar la imágen
Para estirar la imágen, necesitamos crear una imágen temporalmente estirada :
procedure TForm1.FormPaint(Sender: TObject);
var stretched: TBGRABitmap;
begin
stretched := image.Resample(ClientWidth, ClientHeight) as TBGRABitmap;
stretched.Draw(Canvas,0,0,True);
stretched.Free;
end;
Por defecto, esto usa el estiramiento fino, pero puedes precisar si quieres usar el estiramiento simple (mas rápido) :
stretched := image.Resample(ClientWidth, ClientHeight, rmSimpleStretch) as TBGRABitmap;