2010-03-13 17 views
5

HI! ¿Podría decirme cómo cambiar el tamaño de una imagen .png? O mejor, da un ejemplo. He estado buscando la respuesta durante mucho tiempo y parece que nadie sabe cómo cambiar el tamaño de una imagen .png y mantener su transparencia. :(Redimensionar imagen PNG

Respuesta

0

Debo confesar que no tengo ninguna experiencia en programación jugar con png.
De todos modos, se encuentran algunas librerías here. Excepto el soporte nativo Delphi PNG, creo que encontrará allí toda la bibliotecas existentes (nativos de Delphi, por supuesto).

Si nada le ayuda allí, considere la posibilidad de jugar con ImageMagick si es posible ... Esa es la navaja suiza de la manipulación de imágenes y todo lo que puede hacer es factible en la línea de comandos

2

Puede usar Windows Imaging Component (WIC) en Delphi 2010. Puede cargar su imagen PNG en una clase TWICImage, luego extrae la interfaz IWICBitmapScaler de su manejador.

Usando IWICBitmapScaler, puede reducir o reducir la imagen.

WIC está disponible en Windows Vista y Windows 7. Para Windows XP, debe instalar una actualización antes de usarlo.

20

El autor original del componente PNGImage (la base del componente nativo Delphi) tenía un foro donde él y otros publicaban fragmentos de código sobre cómo hacer cosas usando el componente PNGImage.

Antes de que se quitara el foro agarré una copia de todos los fragmentos de código y los coloqué en el sitio web de CodeGear Code Central.

La mayoría, si no todos, funcionan con imágenes PNG nativas y mantienen el canal Alpha.

Aquí está la lista completa de los ejemplos incluidos en el paquete:

  • suave gira un objeto PNG
  • el tamaño de una TPNGObject utilizando un algoritmo suave
  • rebanada uno PNG en varios más pequeños
  • Guarda una imagen como bitmap o png.
  • Muestra trozo descendiente
  • Leer todo el texto Trozos y escribir valores en una TStrings objeto
  • Muestre un cuadro de mensaje con información extraída del archivo PNG
  • encuentra y corta un bloque de una imagen PNG de
  • Este método convierte el png en un objeto jpeg
  • Este método convierte el png en un objeto bmp
  • Overlay uno PNG sobre otro
  • esto hace t que la imagen semitransparente
  • Gira una imagen PNG verticalmente y ahorra volver
  • dibuja una imagen PNG sobre el escritorio

Aquí está el enlace: CodeCentral PNG Methods

1

Hay versiones de PngImage (Gráficos de red portátiles Delphi) Eso permite hacerlo a través de StretchDraw simple.

Tengo la versión que permite hacerlo - 1.564 (31 de julio de 2006)

y la versión que no permite - 1.4361 (8 de marzo de 2003)

para llevarla a cabo utilicé:

corazón .png - con transparencia y logré cambiarle el tamaño y ahorrar con transparencia.

empty.png - el png puro transparente fue utilizado como una hoja en blanco para poner mi imagen en él.

He comprobado que a través de dicho código:

procedure TForm1.Button1Click(Sender: TObject); 
var pic_empty, pic_stamp, pic_result :TPicture; 
    r:TRect; 
    png : TPNGObject; 
begin 

    pic_stamp := TPicture.Create; 
    pic_stamp.LoadFromFile('c:\heart.png'); 
    pic_stamp.Graphic.Transparent := True; 

    pic_empty := TPicture.Create; 
    pic_empty.LoadFromFile('c:\empty.png'); 
    pic_empty.Graphic.Transparent := True; 

    r.Left := 0; 
    r.Top := 0; 
    r.Right := r.Left + 100; 
    r.Bottom := r.Top + 100; 

    pic_result := tpicture.Create; 
    pic_result.Bitmap.Assign(pic_empty.Graphic); 
    pic_result.Graphic.Transparent := True; 
    pic_result.Bitmap.Canvas.StretchDraw(r,pic_stamp.Graphic); 
    pic_result.Bitmap.Width :=100; 
    pic_result.Bitmap.Height:=100; 

    png := TPNGObject.Create; 
    png.Assign(pic_result.Bitmap); 
    png.SaveToFile('c:\result.png'); 

    png.Free; 
    pic_result.Free; 
    pic_empty.Free; 
    pic_stamp.free; 

end; 

Delphi-7, x64 Win7