Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros temas > Trucos
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Los mejores trucos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 30-06-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
¿Cómo se puede acceder de forma rápida a los píxeles de un TBitmap?

¿Cómo se puede acceder de forma rápida a los píxeles de un TBitmap?

El acceso a los píxeles de un TCanvas a través de su propiedad Pixels deja mucho que desear en cuanto a velocidad se refiere. Una forma más rápida es acceder es a través de la propiedad ScanLine del objeto TBitmap.

Probad este ejemplo. Para ello, situad en un formulario un TImage y tres TScrollBar.

Cargad en el TImage un bitmap de 24 bits (cualquier foto en true color que tengais).

Copiad el siguiente programa "encima" del vuestro y probadlo:

Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ExtCtrls;

type

  TForm1 = class(TForm)
    Image1: TImage;
    ScrollBar1: TScrollBar;
    ScrollBar2: TScrollBar;
    ScrollBar3: TScrollBar;

    procedure FormCreate(Sender: TObject);
  public
    procedure ScrollChange(Sender: TObject);
    procedure SetColor(AColor: Integer; ACanal: Integer);
  end;

var

  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);

begin

  ScrollBar1.Max:= 255;
  ScrollBar1.Position:= 128;
  ScrollBar1.LargeChange:= 16;
  ScrollBar1.Tag:= 2;
  ScrollBar1.OnChange:= ScrollChange;
  ScrollBar2.Max:= 255;
  ScrollBar2.Position:= 128;
  ScrollBar2.LargeChange:= 16;
  ScrollBar2.Tag:= 1;
  ScrollBar2.OnChange:= ScrollChange;
  ScrollBar3.Max:= 255;
  ScrollBar3.Position:= 128;
  ScrollBar3.LargeChange:= 16;
  ScrollBar3.Tag:= 0;
  ScrollBar3.OnChange:= ScrollChange;

end;


procedure TForm1.SetColor(AColor: Integer; ACanal: Integer);

var
  i, x, y: integer;
  P : PByteArray;

begin

  with Image1.Picture.Bitmap do begin
    for y:= 0 to Height-1 do begin
      P:= ScanLine[y];
      x:= Width*(2-ACanal);
      for i:= 0 to (Width-1) div 3 do begin
        P[x + ACanal]:= AColor;
        Inc(x, 3);
      end;
    end;
  end;
  Image1.Refresh;
end;


procedure TForm1.ScrollChange(Sender: TObject);

begin
  if Sender is TScrollBar then
    SetColor(TScrollBar(Sender).Position, TScrollBar(Sender).Tag);
end;

end.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 10:30:57.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi