Sign in Join
Wiki copytemporary

BGRABitmap tutorial 4/es: what changed

Revision 1 to 2. Removed lines have a minus sign; added lines have a plus sign.

OldNewLine
11Esta tutoría muestra como acceder directamente a los píxeles.
22
33### Crear un nuevo proyecto
44
55Crea un nuevo proyecto y añade referencia a [[BGRABitmap]], de la misma forma que en [[BGRABitmap tutorial/es|la primer tutoría]].
66
77### Añade un manejador de pintado
88
99Con el inspector de objetos, añade un manejador OnPaint y escribe :
1010
1111``` pascal
1212procedure TForm1.FormPaint(Sender: TObject);
1313var x,y: integer;
1414 p: PBGRAPixel;
1515 image: TBGRABitmap;
1616begin
1717 image := TBGRABitmap.Create(ClientWidth,ClientHeight);
1818
1919 for y := 0 to image.Height-1 do
2020 begin
2121 p := image.Scanline[y];
2222 for x := 0 to image.Width-1 do
2323 begin
2424 p^.red := x*256 div image.Width;
2525 p^.green := y*256 div image.Height;
2626 p^.blue := 0;
2727 p^.alpha := 255;
2828 inc(p);
2929 end;
3030 end;
3131 image.InvalidateBitmap; // cambiado para acceso directo
3232
3333 image.Draw(Canvas,0,0,True);
3434 image.free;
3535end;
3636```
3737
3838Este 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.
3939
4040Para 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 :
4141
4242``` pascal
4343p^.red := x*256 div image.Width;
4444```
4545
4646Define 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.
4747
4848### Ejecuta el programa
4949
5050Deberí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.
5151
52-<figure>
53-<img src="BGRATutorial4.png" title="BGRATutorial4.png" />
54-<figcaption>BGRATutorial4.png</figcaption>
55-</figure>
52+![](/wiki-images/8/8b/BGRATutorial4.png)
5653
5754### Usando espacio de color HSLA
5855
5956Puedes 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.
6057
6158``` pascal
6259procedure TForm1.FormPaint(Sender: TObject);
6360var x,y: integer;
6461 p: PBGRAPixel;
6562 image: TBGRABitmap;
6663 hsla: THSLAPixel;
6764begin
6865 image := TBGRABitmap.Create(ClientWidth,ClientHeight);
6966 hsla.lightness := 32768;
7067 hsla.alpha := 65535;
7168 for y := 0 to image.Height-1 do
7269 begin
7370 p := image.Scanline[y];
7471 hsla.saturation := y*65536 div image.Height;
7572 for x := 0 to image.Width-1 do
7673 begin
7774 hsla.hue := x*65536 div image.Width;
7875 p^:= HSLAToBGRA(hsla);
7976 inc(p);
8077 end;
8178 end;
8279 image.InvalidateBitmap; // cambiado para acceso directo
8380
8481 image.Draw(Canvas,0,0,True);
8582 image.free;
8683end;
8784```
8885
89-<figure>
90-<img src="BGRATutorial4b.png" title="BGRATutorial4b.png" />
91-<figcaption>BGRATutorial4b.png</figcaption>
92-</figure>
86+![](/wiki-images/1/1b/BGRATutorial4b.png)
9387
9488[[BGRABitmap tutorial 3/es|Tutoría anterior (dibujando con el ratón)]] \| [[BGRABitmap tutorial 5/es|Siguiente tutoría (capas y máscaras)]]
9589
9690---
9791*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](/wiki-contact).*
9892Category: Castellano
9993Category: Español

Back to history