Sign in Join
Wiki copytemporary

BGRABitmap tutorial 4/es

Deutsch · English · Español · Français

Esta tutoría muestra como acceder directamente a los píxeles.

Crear un nuevo proyecto

Crea un nuevo proyecto y añade referencia a BGRABitmap, de la misma forma que en la primer tutoría.

Añade un manejador de pintado

Con el inspector de objetos, añade un manejador OnPaint y escribe :

pascal
procedure TForm1.FormPaint(Sender: TObject);
var x,y: integer;
    p: PBGRAPixel;
    image: TBGRABitmap;
begin
  image := TBGRABitmap.Create(ClientWidth,ClientHeight);

  for y := 0 to image.Height-1 do
  begin
    p := image.Scanline[y];
    for x := 0 to image.Width-1 do
    begin
      p^.red := x*256 div image.Width;
      p^.green := y*256 div image.Height;
      p^.blue := 0;
      p^.alpha := 255;
      inc(p);
    end;
  end;
  image.InvalidateBitmap; // cambiado para acceso directo

  image.Draw(Canvas,0,0,True);
  image.free;
end;

Este procedimiento crea un bitmap del mismo tamaño que el disponible en el espacio del cliente. Luego el 'loop' accede directamente a los datos del píxel para renderizar un degradado bidimensional. Finalmente la imágen es dibujada y liberada.

Para acceder a los datos del bitmap, también puedes usar Data, si no interesa el orden de líneas, o ScanLine para acceder a una línea específica. Con una línea, los píxeles son ordenados de izquierda a derecha. Cada componente es definido. Por ejemplo :

pascal
p^.red := x*256 div image.Width;

Define un componente rojo variando de 0 a 255 de izquierda a derecha. El valor máximo de image.Width nunca es alcanzado por x, entonces el componente rojo nunca alcanza 256.

Ejecuta el programa

Deberías ver una forma con un degradado, donde las esquinas son negro, rojo, amarillo y verde. Cuando redimensionas la forma, el gradiente es redimensionado en consecuencia.

Usando espacio de color HSLA

Puedes usar matiz, saturación y luminosidad. Para hacer esto, declara un THSLAPixel. Su rango de valores va desde 0 0a 65535. Para convertirlo en un píxel estándar RBG, usa HSLAToBGRA.

pascal
procedure TForm1.FormPaint(Sender: TObject);
var x,y: integer;
    p: PBGRAPixel;
    image: TBGRABitmap;
    hsla: THSLAPixel;
begin
  image := TBGRABitmap.Create(ClientWidth,ClientHeight);
  hsla.lightness := 32768;
  hsla.alpha := 65535;
  for y := 0 to image.Height-1 do
  begin
    p := image.Scanline[y];
    hsla.saturation := y*65536 div image.Height;
    for x := 0 to image.Width-1 do
    begin
      hsla.hue := x*65536 div image.Width;
      p^:= HSLAToBGRA(hsla);
      inc(p);
    end;
  end;
  image.InvalidateBitmap; // cambiado para acceso directo

  image.Draw(Canvas,0,0,True);
  image.free;
end;

Tutoría anterior (dibujando con el ratón) | Siguiente tutoría (capas y máscaras)


From the Free Pascal wiki, page "BGRABitmap tutorial 4/es", as it stood on 2020-02-10 after a change by Trev, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's Licensing page. If you have concerns about this material, message the admin.

Revision 2, last changed by WikiArchive .

Edited on wiki.freepascal.org by 5 people, 2011–2020

From the official wiki's backup of 26 May 2024: who edited this page there, and when. Edits made there after that date were not recorded, and the earlier versions are not shown here; the main page says why.

WhenWhoWhat changed
LainzNew page: {{BGRABitmap_tutorial_4}} {{BGRABitmap_tutorial_index/es}} Este tutorial muestra como acceder directamente a los píxeles. === Crear un nuevo proyecto === Crea un nuevo proyecto y aña...
Lainzmissing '|' (minor)
Iskraelectrica (minor)
Lainztutoría (minor)
Chronos
VincentText replace - "delphi>" to "syntaxhighlight>" (minor)
TrevFixed syntax highlighting; deleted category already in page template (minor)

Talk about this page

Nobody has opened a bench for this page yet. Sign in to open one.