Ver Mensaje Individual
  #5  
Antiguo 11-06-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Reputación: 24
seoane Va por buen camino
Vamos a ir por partes, o mejor por trozos

Primero lo que tu pides:
Código Delphi [-]
procedure DibujarTrozo(Filename: string; Count, Index: Integer; Dest: TCanvas);
var
  Ancho: Integer;
begin
  with TBitmap.Create do
  try
    LoadFromFile(Filename);
    Ancho:= Width div Count;
    Dest.CopyRect(Rect(0,0,Ancho,Height), Canvas,
                  Rect(Ancho*Index,0,Ancho*(Index+1),Height));
  finally
    Free;
  end;
end;

Para utilizar esa funcion, pasale como parametro la ruta del bmp con los diferentes dibujos uno a continuacion del otro en horizontal, pasale tambien el numero de elementos que contine y el indice del que quieres dibujar teniendo en cuenta que el primero sera el 0 y el ultimo Count-1. Por ejemplo, si el bitmap tiene 10 elementos:

Código Delphi [-]
  // Dibujamos el trozo sobre el propio formulario
  DibujarTrozo('d:\1.bmp',10,0,Canvas);
  // Dibujamos el Trozo sobre un TPaintBox
  DibujarTrozo('d:\1.bmp',10,9,PaintBox1.Canvas);
  // Dibujamos el Trozo sobre un TImage
  DibujarTrozo('d:\1.bmp',10,5,Image1.Canvas);

Ahora te digo lo que haria yo, utilizaria un TImageList y en el OnCreate del formulario utilizaria esto para cargar las imagenes:

Código Delphi [-]
var
  Bitmap: TBitmap;
begin
  Bitmap:= TBitmap.Create;
  try   
    Bitmap.LoadFromFile('d:\1.bmp');
    ImageList1.Width:= Bitmap.Width div 10; // 10 Elementos
    ImageList1.Height:= Bitmap.Height;
    ImageList1.Masked:= FALSE;
    ImageList1.Add(Bitmap,nil);
  finally
    Bitmap.Free;
  end;
end;

Y luego cada vez que lo quisiera dibujar utilizaria esto otro:
Código Delphi [-]
  // Esto por ejemplo dibuja el trozo numero 6
  ImageList1.Draw(Canvas,0,0,5);
  // Y esto por dibuja el trozo numero 10 en un TPaintbox
  ImageList1.Draw(PaintBox1.Canvas,0,0,9);

Tu decides ...

Última edición por seoane fecha: 11-06-2006 a las 03:42:29.
Responder Con Cita