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?
Funcion para unir varias imagenes png
Comenzado por
look
, dic 06 2013 03:04
3 respuestas en este tema
#1
Escrito 06 diciembre 2013 - 03:04
#2
Escrito 06 diciembre 2013 - 03:34
delphi
procedure TForm1.Button1Click(Sender: TObject); var png1, png2, png3: TPNGObject; bmp: TBitmap; begin png1 := TPNGObject.Create; //no error-handling just for testing png2 := TPNGObject.Create; png3 := TPNGObject.Create; png1.LoadFromFile('c:\a.png'); png2.LoadFromFile('c:\b.png'); png3.LoadFromFile('c:\c.png'); bmp:= TBitmap.Create; bmp.Width:= png3.Width; bmp.Height:= png3.Height; bmp.PixelFormat:= pf24bit; // Clear background with form's color bmp.Canvas.Brush.Color:= Color; bmp.Canvas.FillRect(Rect(0, 0, bmp.Width, bmp.Height)); png3.Draw(bmp.Canvas, Rect(0, 0, png3.Width, png3.Height)); png1.Draw(bmp.Canvas, Rect(0, 0, png1.Width, png1.Height)); png2.Draw(bmp.Canvas, Rect(0, 0, png2.Width+30, png2.Height)); Image1.Picture.Assign(bmp); //display it on a TImage component Image1.Picture.SaveToFile('c:\abc.png'); bmp.Free; png1.Free; png2.Free; 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?
#3
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,
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,
#4
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
function Bmp32ToPng(bmp: TBitmap): TPngObject; var x, y: integer; src, dst: PngImage.pByteArray; begin Result:= nil; if bmp.PixelFormat<>pf32bit then Exit; Result:= TPngObject.CreateBlank(COLOR_RGBALPHA, 8, bmp.Width, bmp.Height); Result.Canvas.Draw(0, 0, bmp); for y:= 0 to bmp.Height-1 do begin src:= bmp.ScanLine[y]; dst:= Result.AlphaScanLine[y]; for x:= 0 to bmp.Width-1 do dst[x]:= src[x*4+3]; end; end;
Al parecer funciona bien...