Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-02-2011
JXJ JXJ is offline
Miembro
 
Registrado: abr 2005
Posts: 2.475
Poder: 22
JXJ Va por buen camino
Question ¿ como Bitmap dibujar lineas onduladas?

hola
tengo este codigo

Código Delphi [-]
var
  bitmapimagen1: TBitmap;
begin
  bitmapimagen1:=TBitmap.Create;
  bitmapimagen1.Canvas.Brush.Color := clNavy;
  bitmapimagen1.Height:= 200;
  bitmapimagen1.Width:=200;
  bitmapimagen1.PixelFormat := pf24Bit;
end;

¿como puedo dibujar lineas onduladas como difumadas?

como si fueran las que usan los captchas al registrarse
en un sitio web
Responder Con Cita
  #2  
Antiguo 09-02-2011
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Si vas a manipular bitmaps, los TBitmap no son muy adecuados. Écha un vistazo a la biblioteca Vampyre Imaging Library. En cierto modo son una extensión de TBitmap (de hecho permite intercambiar datos entre ellos), soportan muchos formatos e incluyen ya algunos métodos para aplicar filtros, transformaciones y demás.

Es verdad que para cosas sencillas son un poco "pesadas", pero muy buenas y tal vez te den ideas.
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
  #3  
Antiguo 09-02-2011
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 19
Chris Va por buen camino
O talvez puedas propar la nueva biblioteca DGI+ de Windows. Obtienes resultados asombrosos usada de forma adecuada.

Saludos,
Chris
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Responder Con Cita
  #4  
Antiguo 09-02-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola JXJ.

Probá si te sirve este código:
Código Delphi [-]
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Image1: TImage;
    procedure Button1Click(Sender: TObject);
  private
    procedure RotarCaracter(Ch: Char; Angulo,Siguiente: Integer);
    procedure GenerarImagen(NumChar: Byte);
  public
  end;

var
  Form1: TForm1;

implementation {$R *.dfm}

uses DateUtils;

procedure TForm1.RotarCaracter(Ch: Char; Angulo, Siguiente: Integer);
var
  LFont: TLogFont;
  Font: THandle;
begin
  with LFont do
  begin
    lfHeight:= 20;
    lfWidth:=  10;
    lfWeight:= FW_HEAVY;
    lfEscapement:= Angulo;
    lfCharSet:= DEFAULT_CHARSET;
    lfUnderline := Byte(False);
    lfStrikeOut := Byte(True);
  end;
  Font:= CreateFontIndirect(LFont);
  SelectObject(Image1.Canvas.Handle,Font);
  SetTextColor(Image1.canvas.handle,RGB(Random(255)-1,Random(255)-1,Random(255)-1));
  Image1.Canvas.TextOut(Siguiente, 20, Ch);
  DeleteObject(Font);
end;

procedure TForm1.GenerarImagen(NumChar: Byte);
const
  CARACTERES = '01234567890ABCDEFGHIJKLMNPRSTUVWXYZ';
var
  Texto: string;
  i: integer;
begin
  Image1.Picture.LoadFromFile('C:\TEMP\FONDO.BMP'); // rectángulo color claro (mejor blanco)
  RandSeed:= Random(SecondOf(Now));
  Randomize;
  Texto:= '';
  for i:= 1 to NumChar do
     Texto:= Texto + CARACTERES[1 + Random(Length(CARACTERES))];
  if Length(Texto) > NumChar then
     Texto := Copy(Texto, 1, NumChar);
  for i := 1 to Length(Texto) do
     RotarCaracter(Texto[i], Random(900)+1, 20*i-15);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  GenerarImagen(8);
end;

end.

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 09-02-2011 a las 23:24:03.
Responder Con Cita
  #5  
Antiguo 13-02-2011
JXJ JXJ is offline
Miembro
 
Registrado: abr 2005
Posts: 2.475
Poder: 22
JXJ Va por buen camino
hola
que raro en dias anteriores no me vbulletin no me dejaba
escribir la respuesta.

bueno .
gracias por su ayuda.

las lineas onduladas las quiero hacer asi.
poniendolas en el fondo de la imagen de forma aleatoria.

Responder Con Cita
  #6  
Antiguo 13-02-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola JXJ.

Te había entendido mal, lo que hace el codigo anterior es generar las letras al azar y posicionarlas en ondas como en los captchas.

Para las lineas onduladas se me ocurrió este código pensando en las ondas senoidales:
Código Delphi [-]
...
procedure TForm1.DibujarOnda(PosY,LongitudOnda,Elongacion: Integer; AColor: TColor);
var
  P,C: TCoord;
  i: Integer;
begin
  C.X:= 0;
  C.Y:= 0;
  for i:= 0 to 360 do
  begin
    P.X := Round(i * LongitudOnda);
    P.Y := Round(Sin(i) * Elongacion);
    Image1.Canvas.Pen.Width:= 3;
    Image1.Canvas.Pen.Color:= AColor;
    Image1.Canvas.MoveTo(P.X, PosY+ P.Y);
    Image1.Canvas.LineTo(C.X, PosY+ C.Y);
    C:= P;
  end;
end;

procedure TForm1.DibujarFondo;
const
  Colores: array[1..16] of TColor =(clBlack,clBlue,clGray,clFuchsia,
           clGreen,clLime,clMaroon,clNavy,clOlive,clPurple,clRed,clSilver,
           clYellow,clTeal,clMaroon,clBlue);
var
  i, PosY: Integer;
begin
  Randomize;
  PosY:= 30;
  for i:= 1 to 4 do 
  begin
    DibujarOnda(PosY, Random(50)+20, 20+Random(10), Colores[Random(16)+1]);
    Inc(PosY, Random(20)+50);
  end;
end;
...
Llamada de ejemplo:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
  Image1.Picture.LoadFromFile('C:\TEMP\FONDO.BMP'); //(fondo blanco echo en Paint)
  DibujarFondo;
end;

Muestra:


Espero que te sirva o al menos te aporte alguna idea....

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 13-02-2011 a las 08:43:54.
Responder Con Cita
  #7  
Antiguo 14-02-2011
JXJ JXJ is offline
Miembro
 
Registrado: abr 2005
Posts: 2.475
Poder: 22
JXJ Va por buen camino
Wink

excelente

Gracias eficsa eso es .
Responder Con Cita
Respuesta



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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
como dibujar lineas en el componente Paint Box kurono Varios 2 09-12-2009 20:27:56
Dibujar lineas en un ScrollBox islu Varios 0 11-06-2007 17:31:09
Dibujar lineas mcnudi Impresión 3 09-11-2006 13:52:54
Dibujar lineas en un informe. manu Impresión 3 02-11-2006 17:58:52
dibujar las lineas en un qreport davidgaldo Impresión 2 17-02-2004 14:02:15


La franja horaria es GMT +2. Ahora son las 10:32:51.


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