2011-12-02 46 views
6

Estoy cargando una imagen de disco y quiere copiar (parte de) a un segundo TImage:Cómo utilizar el método CopyRect en Delphi

Image1.Picture.LoadFromFile(S); 
with Image1.Picture.Bitmap do 
    Image2.Canvas.CopyRect(Image2.Canvas.ClipRect, Canvas, Canvas.ClipRect); 

Image2 simplemente muestra un rectángulo blanco, y Image1 doesn' t mostrar el archivo desde el disco. Si elimino la segunda declaración, Image1 muestra la imagen. (Lo más curioso: si solo comento la instrucción CopyRect y dejo la línea "con" (instrucción vacía) ¡La imagen 1 tampoco aparece!)

¿Cómo uso CopyRect para copiar parte de una imagen?

edición
Cuando me separé de los dos estados en dos acciones separadas (botones) ocurre lo siguiente:

  1. imagen se carga y espectáculos en Image1
  2. Image1 desaparece, y muestra Image2 (!) un rectángulo blanco.

Por cierto, estoy usando Delphi 2009.

+0

I copypasted su código y funciona muy bien para mí. Intente separar ambas instrucciones (en 2 botones) y vea lo que sucede –

+0

No es extraño: 'Image1.Picture.Bitmap' obliga al tipo de gráfico a contener un 'bitmap'. Si 'Image1.Picture' no es ya un mapa de bits (que parecería así, aunque falta en la pregunta), el gráfico lo libera y crea un mapa de bits. –

+0

@Magicmaster - Gracias, pero parece que no funciona. Agregué a mi pregunta. – stevenvh

Respuesta

6

TCanvas.CopyRect copias del rectángulo utilizando StretchBlt. StretchBlt requiere un mapa de bits. Si está cargando cualquier otro tipo de gráfico a su imagen, entonces su Picture.Bitmap está vacío. De hecho, el mapa de bits se crea justo cuando se refiere a él: with Image1.Picture.Bitmap do.

Puede utilizar un mapa de bits temporal para la causa:

var 
    Bmp: TBitmap; 
begin 
    Image1.Picture.LoadFromFile(S); 

    Bmp := TBitmap.Create; 
    try 
    Bmp.Assign(Image1.Picture.Graphic); 

    with Bmp do 
     Image2.Canvas.CopyRect(Image2.Canvas.ClipRect, Canvas, Canvas.ClipRect); 
    finally 
    Bmp.Free; 
    .. 
+0

Gracias, eso lo arregla. Ahora solo tengo que obtener los colores correctos :-( – stevenvh

Cuestiones relacionadas