Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 05-05-2008
pulpin pulpin is offline
Miembro
 
Registrado: feb 2008
Ubicación: medellin,colombia
Posts: 53
Poder: 17
pulpin Va por buen camino
rotar imagen en c++ builder

bueno amigos llego a ustedes con esta pequeña duda, como puedo rotar una imagen en un angulo x, me gustaria encontrar una forma facil y practica, pero recibo cualquier ayuda, ademas si conocen algun componente que me ayude en esto se los agradeceria, las ayudas que he encontrado en el foro solo han sido para el delphi, por esto les pido ayuda. de antemano gracias.
Responder Con Cita
  #2  
Antiguo 05-05-2008
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Revisa el truco 455 aunque está en delphi, puedes traducirlo a C o compilarlo tal cual. Recuerda que Builder compila código delphi.

Saludos.
Responder Con Cita
  #3  
Antiguo 05-05-2008
pulpin pulpin is offline
Miembro
 
Registrado: feb 2008
Ubicación: medellin,colombia
Posts: 53
Poder: 17
pulpin Va por buen camino
te agradeceria mucho si me indicas como puedo hacer que el builder compile el codigo ya queme salen algunos (muchos) erroes, o si te queda tiempo y no es mucha molestia, traducirme las partes mas complicadas.gracias de nuevo.
Responder Con Cita
  #4  
Antiguo 05-05-2008
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Guarda el código delphi en un archivo exclusivo para él. Nombralo como quieras por ejemplo MODULO.PAS

Incluyelo en el proyecto como harías con otro módulo escrito en C.

Incluye el archivo cabecera MODULO.HPP donde tengas que usar esas funciones escritas en delphi. Ese archivo cabecera lo va a crear Builder automáticamente cuando compiles es código delphi.

Saludos.
Responder Con Cita
  #5  
Antiguo 05-05-2008
pulpin pulpin is offline
Miembro
 
Registrado: feb 2008
Ubicación: medellin,colombia
Posts: 53
Poder: 17
pulpin Va por buen camino
dime donde estoy errado:

copio el codigo en el notepad y lo guardo como .pas
luego abro el c++ builder, y abro el archivo .pas, pero no me permite compilar el archivo.

lo otro que intento es:

guardo el archivo como .pas en el notepad, luego adiciono el archivo .pas a mi proyecto, luego le doy copilar y me salen varios errores. los cuales tendre que estudiar para resolver.

gracias, espero tu opinion
Responder Con Cita
  #6  
Antiguo 05-05-2008
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Claro, Si simplemente has copiado el código, te faltan algunas cosas.
Debes definir una unidad completa con sus cabeceras...

Prueba a compilar este código tal cual, pero guardado en un archivo llamado Rotar.pas. Lo añades a tu proyecto....

Código Delphi [-]
unit Rotar;

//----------------------------------------------------------------------------------------
interface  

uses
   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;  

function Rotate(Canvas: TCanvas; Width, Height, iAngle: Integer; Back: LongBool): TBitmap;



//----------------------------------------------------------------------------------------
implementation  

function Rotate(Canvas: TCanvas; Width, Height, iAngle: Integer; Back: LongBool): TBitmap;
var
 Points: array [0..2] of TPoint;
 Radio, Angle, _Angle: Real;
begin
 Points[0] := Point(-Width, Height);
 Points[1] := Point(Width, Height);
 Points[2] := Point(-Width, -Height);
// Points[3] := Point(Width, -Height);
 Radio := Sqrt(Sqr(Width / 2) + Sqr(Height / 2));
 _Angle := (360 - (iAngle mod 360)) * pi / 180;
 iAngle := 3;
 repeat Dec(iAngle);
  Angle := ArcTan(Points[iAngle].Y / Points[iAngle].X) + _Angle;
  if Points[iAngle].X < 0 then
   Angle := Angle + Pi;
  Points[iAngle] := Point(Round((Cos(Angle) * Radio) + Radio), Round(Radio - (Sin(Angle) * Radio)));
 until not LongBool(iAngle);

 Result := TBitmap.Create;
 Result.TransparentColor := clFuchsia;
 Result.Canvas.Brush.Color := clFuchsia;
 iAngle := Round(Radio * 2);
 Result.Height := iAngle;
 Result.Width := iAngle;
 plgblt(Result.Canvas.Handle, Points, Canvas.Handle, 0, 0, Width, Height, 0, 0, 0);
 if Back then Result.Canvas.CopyRect(Rect(0, 0, iAngle, iAngle), Result.Canvas, Rect(iAngle-1, 0, 0, iAngle));
end;

end.
De esta forma seguro que compila
Saludos.



EDITO:

Tambien te compliará si en la linea uses colocas sólamente:
Código Delphi [-]
uses
  Windows, SysUtils, Classes, Graphics;

Última edición por escafandra fecha: 05-05-2008 a las 21:10:10.
Responder Con Cita
  #7  
Antiguo 05-05-2008
pulpin pulpin is offline
Miembro
 
Registrado: feb 2008
Ubicación: medellin,colombia
Posts: 53
Poder: 17
pulpin Va por buen camino
pues gracias se resolvieron algunos errores ahora solo me salen 4:

'UNIT' expected but 'INTERFACE' found
undeclared identifier TBitmap
undeclared identifier TCanvas
';' expected but 'IMPLEMENTATION' found
y un fatal error que dice que no puede compilar usando unit " C:\rotar.pas"
Responder Con Cita
  #8  
Antiguo 05-05-2008
pulpin pulpin is offline
Miembro
 
Registrado: feb 2008
Ubicación: medellin,colombia
Posts: 53
Poder: 17
pulpin Va por buen camino
ahora solo me salen estos errores

el de UNIT
el de IMPLEMENTATION
y el ultimo

que me falta
Responder Con Cita
  #9  
Antiguo 05-05-2008
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Si has copiado todo el código tal y como te lo he posteado, en un archivo de texto llamado Rotar.pas, no deberías tener errores.

Lo he probado en C++Builder 5 y me compila perfectamente....

Repásalo bien.

Saludos.
Responder Con Cita
  #10  
Antiguo 05-05-2008
pulpin pulpin is offline
Miembro
 
Registrado: feb 2008
Ubicación: medellin,colombia
Posts: 53
Poder: 17
pulpin Va por buen camino
muchas gracias, ya se, me habia equivocado en dos lineas, perdon por el error.

sumale una mas a mi deuda.
Responder Con Cita
  #11  
Antiguo 05-05-2008
pulpin pulpin is offline
Miembro
 
Registrado: feb 2008
Ubicación: medellin,colombia
Posts: 53
Poder: 17
pulpin Va por buen camino
cuando le doy run a mi aplicacion me pide EnJpgGr.h, el archivo de cabecera que no tengo, crees que me falto algo.
Responder Con Cita
  #12  
Antiguo 05-05-2008
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Pues esa cabecera no tiene nada que ver con el código para rotar en cuestión. Tal vez estés usando otro código, ajeno al Builder, o de algún componente no standard.

He probado la rutina en una aplicación de prueba con un boton y un TImage.
El evento del botón hace esto:

Código:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  Graphics::TBitmap *Bitmap;
  Bitmap = Rotate(Image1->Canvas, Image1->Width, Image1->Height, 90, 0);
  Image1->Picture->Assign(Bitmap);
  delete Bitmap;
}
Me funciona sin problemas.

Saludos.
Responder Con Cita
  #13  
Antiguo 06-05-2008
pulpin pulpin is offline
Miembro
 
Registrado: feb 2008
Ubicación: medellin,colombia
Posts: 53
Poder: 17
pulpin Va por buen camino
gracias ya me funciono muy bien
Responder Con Cita
  #14  
Antiguo 18-06-2008
Arroyo69 Arroyo69 is offline
Registrado
 
Registrado: jun 2008
Posts: 9
Poder: 0
Arroyo69 Va por buen camino
He estado leiendo este tema y me han surgido diferentes problemas debido a q estoy programando en builder c++, no entiendo para que utiliza el back ese, y ademas cada vez que giro se me va haciendo la imagen mas pequeña.
Responder Con Cita
  #15  
Antiguo 19-06-2008
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Bueno, mírate esto, que es el corazón del tema. Trata de elejir tu rectangulo de forma correcta para que no te cambie el tamaño.

Saludos.
Responder Con Cita
  #16  
Antiguo 19-06-2008
Arroyo69 Arroyo69 is offline
Registrado
 
Registrado: jun 2008
Posts: 9
Poder: 0
Arroyo69 Va por buen camino
No lo entiendo. Serias tan amable de poder explicarmelo minimmente, es que estoy desesperado, ya que el delphi no lo entiendo muy bien ya que lo estoy aciendo en builder c++.
Gracias
Responder Con Cita
  #17  
Antiguo 19-06-2008
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Bueno, yo tampoco estoy fuerte en delphi, simplemente adapte el truco 455 para poderlo compilar y usar desde el Builder C++. El autor del código original es Javier Ferrari.

Como te decía el corazón es la API de windows GDI PlgBlt a la que puedes acceder desde C++ Builder directamente. La información de su uso la tienes en la ayude del Builder para API Win32 y en la web de Microsoft. Quizás esté mas clara la explicación de la ayuda de Builder, aunque el origen de la misma es Microsoft.

El resto del código no es mas que una preparación de los tres puntos vértice del paralelograma destino que está rotado y los datos del rectángulo de origen (x, y, ancho y alto).

Observa que al rotar la imagen sobre el rectángulo original, quedan zonas vacías que se rellenan con una máscara si la defines. La API PlgBlt también permite escalar la imagen, con lo que puedes cambiarla de tamaño.

Experimenta con ella. Espero haberte servido de alguna ayuda.

Saludos.
Responder Con Cita
  #18  
Antiguo 20-06-2008
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 20
cHackAll Va por buen camino
Hola, como comentaba en el truco en cuestión, he convertido mi code a BCB para que lo puedan manejar a su gusto... espero que el uso de @ funcione tal y como en C++

Saludos
Responder Con Cita
  #19  
Antiguo 21-08-2008
Arroyo69 Arroyo69 is offline
Registrado
 
Registrado: jun 2008
Posts: 9
Poder: 0
Arroyo69 Va por buen camino
Problema

Gracias a todos por la ayuda, pero sigo teniendo un poblema.
Todo me funciona bien, pero al moverse mi imagen es de 50X140 y se me sale de mi timage, con lo cual se me corta la imagen y la primera vez me lo hace bien pero las siuientes veces que voy girando m va desapareciendo hasta que desaparece del timage.
Responder Con Cita
  #20  
Antiguo 09-09-2008
Arroyo69 Arroyo69 is offline
Registrado
 
Registrado: jun 2008
Posts: 9
Poder: 0
Arroyo69 Va por buen camino
ayuda

solicito ayuda a mi pregunta anterior, por favar.
Gracias
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Como rotar una imagen en delphi x grados SIN DEFORMARLA? djmetroid Gráficos 14 27-05-2008 07:07:21
Rotar Imagen Rako Gráficos 5 23-11-2007 12:51:14
Rotar imagen jpg ElDioni Gráficos 6 09-11-2007 11:05:50
rotar una imagen sin parar jarscuba Gráficos 4 14-03-2005 09:51:31
Rotar una imagen zuriel_zrf Gráficos 2 29-12-2003 19:37:53


La franja horaria es GMT +2. Ahora son las 15:28:39.


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
Copyright 1996-2007 Club Delphi