Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Gráficos (https://www.clubdelphi.com/foros/forumdisplay.php?f=8)
-   -   Como rotar una imagen en delphi x grados SIN DEFORMARLA? (https://www.clubdelphi.com/foros/showthread.php?t=50773)

djmetroid 28-11-2007 02:34:28

Como rotar una imagen en delphi x grados SIN DEFORMARLA?
 
ya he visto los codigos 451 y 452 en trucomania que rotan una imagen x grados, pero hay un gran problema, que al ir rotando la imagen se va deformando y poniendose un fondo negro o blanco, por ejemplo, si quiero rotarla 45 grados se forma un octagono que afecta la imagen y el fondo es negro o blanco, ya puse transparencias, autosize, etc y aun sigue deformandose y necesito una aplicacion que rote imagenes 45 grados minimo, por favor si alguien sabe como solucionar ese problema se lo agradeceria
gracias

dec 28-11-2007 02:40:02

Hola,

No sé si será matar moscas a cañonazos, pero, la librería Imaging para Delphi no sólo puede rotar imágenes (que lo hace, y muy bien) sino que puede hacer otras muchas cosas más, como convertir entre decenas de formatos de imagen. No es complicada de usar, por lo menos para lo que te propones, es de código abierto y gratuita, y, ya te digo, yo la he usado y aun uso con buenos resultados.

mbelda 03-12-2007 19:06:03

Yo lo he intentado con imaging library pero no soporta TIFF, alquien sabe de alguna otra utilidad o librería que soporte TIFF, tengo que rotar imagenes TIFF, por ahora lo hago desde línea de comandos con un programa al que le paso parametros (rotar.exe .\imagen.tif rotate=90), pero no me acaba de convencer porque hasta que no se rote no puedo seguir con la ejecución del procedimiento, y la verdad es que es un apaño, estoy intentando encontrar algo para hacerlo desde codigo, pero en fin, estoy ciego de buscar por internet y no encontrar nada.

dec 03-12-2007 19:16:40

Hola,

La librería susomentada soporta el formato TIFF. Yo juraría que este formato está soportado, a lo menos en parte. No recuerdo ahora mismo si puedes rotar una imagen TIFF, directamente, pero, lo que es casi seguro es que puedes convertir una imagen TIFF a BMP, por ejemplo, rotar dicha imagen BMP, y luego guardarla de nuevo en formato TIFF. Corrígeme si me equivoco.

mbelda 03-12-2007 19:52:28

Pues no se si te equivocas porque no lo he probado, pero ahora que lo dices lo voy a ver posiblemente tengas razon, pero no veas la historia, convierte, rota y vuelve a convertir, pero si funciona, pues no es mala opcion. Gracias, por la idea, no me lo había propuesto por el tema de si pierde calidad, pero voy a ver que tal.

dec 03-12-2007 19:56:00

Hola,

En realidad no es tanta "historia". Yo tengo un programa que usa la referida librería. El programa admite como entrada una imagen de cualquiera de los formatos de entradaq soportados, puede rotar la imagen, y, a continuación, guardarla en cualquiera de los formatos de salida soportados. Todo eso lo hace en "cero coma", como suele decirse. Vamos, que, no es tanta historia.

Y, eso suponiendo que no puedas rotar una imagen TIFF, directamente, y volverla a guardar. ¿Esto sí que lo probaste, no?

dec 03-12-2007 20:07:46

Hola,

Acabo de comprobar que la librería soporta el formato TIFF y puede rotar imágenes en este formato directamente. Si descargas la librería verás que en la carpeta "demos" viene un programa de nombre "VampConvert.exe". Puedes usar el programa de esta forma:

Código:

VampConvert.exe -infile=C:\apple.tif -outfile=C:\appler.tif -rotate=90
El programa es una demostración de la librería en cuestión, quiere decirse, que lo que el programa hace puede hacerlo la librería.

Podrías utilizar un código similar a este, y, ojo que lo he adaptado "al vuelo" y sin probarlo del programa en que yo lo estoy usando, lo mismo se me escapa algo, pero, básicamente, esto es:

Código Delphi [-]
uses
  Imaging, ImagingTypes, ImagingUtility;

{...}

function RotarImagen(imagenEntrada, imagenSalida, angulo: string): boolean;
var
  img: TImageData;
  aAngulo: integer;
begin
  result := false;
  InitImage(img);
  try
    aAngulo := StrToIntDef(angulo, 0);
    if not Imaging.LoadImageFromFile(imagenEntrada,img) then
      raise Exception.Create(ImagingUtility.GetExceptObject.Message);
    if (aAngulo mod 90) = 0 then
      result := Imaging.RotateImage(img,aAngulo)
    else
      raise Exception.Create(rsErrorImgAnguloIncorrecto);
    if not Imaging.SaveImageToFile(imagenSalida,img) then
      raise Exception.Create(ImagingUtility.GetExceptObject.Message);
  finally
    FreeImage(img);
  end;
end;

Como verás, el formato de la imagen de entrada y el formato de la imagen de salida se deducen de su extensión. En el programa que menciono, tengo algún procedimiento que se encarga de comprobar que, efectivamente, tanto el formato de la imagen de entrada, como el de la imagen de salida, están soportados por la librería Imaging.

mbelda 04-12-2007 16:21:58

Lo de vanconvert.exe ya lo probe y no se porque me dijo "tipo de archivo no soportado", por eso lo había descartado, voy a probar lo que me propones, supongo que ira perfecto, muchas gracias, eres un máquina, si quieres venirte para el sur, no dudes en decirlo, estaria encantado de trabajar contigo, jeje. Estamos buscando programador en delphi + sqlserver.

mbelda 04-12-2007 16:30:57

No entiendo, debe ser por la versión
 
Me sigue sin funcionar el programa vampconvert, dice que tif no esta en los supported file formats <IMPUT>: jpg, bmp... pero tif no aparece.

Yo me descarge las librerias de sourceforge.net, la ultima versión, me puedes enviar por mail tu vampconvert.exe a ver si con el tuyo funciona y es cuestión de version? Gracias.

mbelda 04-12-2007 16:34:46

Version
 
Es la 0240 de 28-06-2007

mbelda 04-12-2007 16:59:50

Jpg Ok
 
:)RotarImagen, funciona perfectamente, el código sin ningún error, corto, claro y efectivo, pero el tif no está dentro de los formatos reconocidos, he hecho la prueba con un jpg y funciona bien, pero el tif nada. He revisado las carpetas y dentro de Imaging está \Extras\Extensions\LibTiff, que supongo que hay es donde estarán las funciones para pasar de tif a jpg y de jpg a tif otra vez.

dec 04-12-2007 17:53:50

Hola,

Pues te aseguro que yo probé ayer con una imagen "TIF". Otra cosa es que haya "imágenes TIF diferentes"... de hecho yo no encontré ninguna en mi disco duro, así que tuve que buscar un poco por ahí, pero, al cabo conseguí una imagen "TIF" (o que tenía extensión TIF, o que "ponía" que era TIF) y pude llevar a cabo la rotación sin problemas.

No sé... :(

salvica 03-01-2008 16:18:55

Utiliza el componente TRotateImage (o algo así), es fácil de usar u gratuito
Saludos
salvica

ElDioni 03-01-2008 17:51:07

Mira esto
 
Hace poco yo estaba con este mismo problema, aunque yo lo que tenía que transformar era un jpg, pero creo que te servirá igual, chequealo para ver si te funciona. Aquí te dejo el código, creo que lo saqué de la sección de trucos o de algún hilo, lo que tengo claro es que lo obtuve, como tantas veces, en clubdelphi, pagina a la que le estoy muy agradecido, sobre todo a sus foreros.

Código Delphi [-]
procedure TFrmGesArt.Convertir(Origen:string);//, Destino: string);
var
  Imagen: TPicture;
  Bitmap: TBitmap;
begin
  Imagen:= TPicture.Create;
  try
    Imagen.LoadFromFile(Origen);
    if not (Imagen.Graphic is TBitmap) then
    begin
      Bitmap:= TBitmap.Create;
      try
        Bitmap.Width:= Imagen.Width;
        Bitmap.Height:= Imagen.Height;
        Bitmap.Canvas.Draw(0,0,Imagen.Graphic);
        image4.Picture.Bitmap:=bitmap;
        //Bitmap.SaveToFile(Destino);
      finally
        Bitmap.Free;
      end;
    end else image4.picture.bitmap:=bitmap;//Imagen.SaveToFile(destino);
  finally
    Imagen.Free;
  end;
end;

Espero que te sirva de algo

guilloking 27-05-2008 07:07:21

Hola, ustedes sabrian como rotar un shape, no encuentro la manera.


La franja horaria es GMT +2. Ahora son las 02:00:04.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi