Ir al contenido


Foto

Funcion para unir varias imagenes png


  • Por favor identifícate para responder
3 respuestas en este tema

#1 look

look

    Advanced Member

  • Miembros
  • PipPipPip
  • 418 mensajes
  • LocationLa Ceiba-Atlantida-Honduras

Escrito 06 diciembre 2013 - 03:04

Hola Amigos,  tengo la necesidad de unir varias imagenes png, tengo un directorio en donde tengo algo asi "A.PNG , B.PNG , C.png" , entonces me gustaria una funcion que una varias imagenes
para quedar asi " AB.PNG".

¿Alguien me hecha una mano?
  • 0

#2 look

look

    Advanced Member

  • Miembros
  • PipPipPip
  • 418 mensajes
  • LocationLa Ceiba-Atlantida-Honduras

Escrito 06 diciembre 2013 - 03:34



delphi
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. var
  3.   png1, png2, png3: TPNGObject;
  4.   bmp: TBitmap;
  5. begin
  6.   png1 := TPNGObject.Create; //no error-handling just for testing
  7.   png2 := TPNGObject.Create;
  8.   png3 := TPNGObject.Create;
  9.  
  10.   png1.LoadFromFile('c:\a.png');
  11.   png2.LoadFromFile('c:\b.png');
  12.   png3.LoadFromFile('c:\c.png');
  13.  
  14.   bmp:= TBitmap.Create;
  15.   bmp.Width:= png3.Width;
  16.   bmp.Height:= png3.Height;
  17.   bmp.PixelFormat:= pf24bit;
  18.  
  19.   // Clear background with form's color
  20.   bmp.Canvas.Brush.Color:= Color;
  21.   bmp.Canvas.FillRect(Rect(0, 0, bmp.Width, bmp.Height));
  22.  
  23.  
  24.   png3.Draw(bmp.Canvas, Rect(0, 0, png3.Width, png3.Height));
  25.   png1.Draw(bmp.Canvas, Rect(0, 0, png1.Width, png1.Height));
  26.   png2.Draw(bmp.Canvas, Rect(0, 0, png2.Width+30, png2.Height));
  27.  
  28.   Image1.Picture.Assign(bmp); //display it on a TImage component
  29.   Image1.Picture.SaveToFile('c:\abc.png');
  30.   bmp.Free;
  31.   png1.Free;
  32.   png2.Free;
  33.   png3.Free;



Hola amigos, encontre este codigo, funciona bien pero al guardar la imagen esta pierde la transparencia y queda con fondo blanco, ¿ Hay alguna manera de solucionarlo?
  • 0

#3 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 06 diciembre 2013 - 05:01

Hola look,
El problema está en que la imagen generada lo haces sobre un TBitmap, el cual carece del concepto de transparencia.
Una vez que tienes esta imagen debes proceder a convertirla a PNG.

Lamentablemente no dispongo de Delphi a mano como para tirarte algo de código. En el foro si no recuerdo mal ya hay algo sobre BMP y PNG.

Saludos,
  • 0

#4 look

look

    Advanced Member

  • Miembros
  • PipPipPip
  • 418 mensajes
  • LocationLa Ceiba-Atlantida-Honduras

Escrito 07 diciembre 2013 - 07:34

Hola look,
El problema está en que la imagen generada lo haces sobre un TBitmap, el cual carece del concepto de transparencia.
Una vez que tienes esta imagen debes proceder a convertirla a PNG.

Lamentablemente no dispongo de Delphi a mano como para tirarte algo de código. En el foro si no recuerdo mal ya hay algo sobre BMP y PNG.

Saludos,



Gracias amigo, encontre esta funcion :



delphi
  1. function Bmp32ToPng(bmp: TBitmap): TPngObject;
  2. var
  3.   x, y: integer;
  4.   src, dst: PngImage.pByteArray;
  5. begin
  6. Result:= nil;
  7. if bmp.PixelFormat<>pf32bit then
  8.   Exit;
  9.  
  10.   Result:= TPngObject.CreateBlank(COLOR_RGBALPHA, 8, bmp.Width, bmp.Height);
  11.   Result.Canvas.Draw(0, 0, bmp);
  12.   for y:= 0 to bmp.Height-1 do
  13.   begin
  14.     src:= bmp.ScanLine[y];
  15.     dst:= Result.AlphaScanLine[y];
  16.     for x:= 0 to bmp.Width-1 do
  17.       dst[x]:= src[x*4+3];
  18.   end;
  19. end;



Al parecer funciona bien...
  • 0




IP.Board spam blocked by CleanTalk.