Foros del Web » Programación para mayores de 30 ;) » C/C++ »

rotar imagen

Estas en el tema de rotar imagen en el foro de C/C++ en Foros del Web. Hola a todos, ¿saveis si existe alguna funcion o metodo q me de la posibilidad de rotar una imagen, ya sea dandole en angulo, las ...
  #1 (permalink)  
Antiguo 24/09/2008, 04:01
 
Fecha de Ingreso: julio-2008
Mensajes: 3
Antigüedad: 15 años, 9 meses
Puntos: 0
rotar imagen

Hola a todos, ¿saveis si existe alguna funcion o metodo q me de la posibilidad de rotar una imagen, ya sea dandole en angulo, las posiciones, ect..? Estoy usando builder c++ y de momento no he encontrado nada y me estraña q no haya nada implementado con este tema.

Un saludo y muchas gracias
  #2 (permalink)  
Antiguo 24/09/2008, 08:26
 
Fecha de Ingreso: noviembre-2003
Ubicación: Mexico
Mensajes: 1.081
Antigüedad: 20 años, 5 meses
Puntos: 7
Respuesta: rotar imagen

lo mas seguro es que tengas que hacer una operacion de matrices.
Es muy facil realmente, solo tienes que multiplicar tus coordenadas por el angulo de rotacion.

Si quieres puedes poner tu codigo donde la dibujas y tal vez te pueda ayuda.r
  #3 (permalink)  
Antiguo 24/09/2008, 08:33
 
Fecha de Ingreso: julio-2008
Mensajes: 3
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: rotar imagen

pues cargo la imagen .bmp con una clase propia imagen q en realidad es lo q tu comentas, una matriz q en cada punto tiene el valor de las componentes r,g,b de dicha imagen, y la rotación la necesito ya q mi programa trabaja con imagenes escanedas y antes de aplicar nada, debo de tener la imagen totalmente centrada, pero no se como hacerlo.

La verdad es q pansaba q existiria algun metodo o funacion, q al pasarle la imagen y el angulo de rotación ya lo hiciera directamento, pero creo q no, por q llevo 2 dias buscando y de momento nada de nada.

Un saludo y mchas gracias
  #4 (permalink)  
Antiguo 24/09/2008, 11:02
Avatar de antoniog  
Fecha de Ingreso: junio-2006
Mensajes: 118
Antigüedad: 17 años, 10 meses
Puntos: 4
Respuesta: rotar imagen

Hola,

La verdad es que ne los dos dias que te la pasaste buscando pudiste haber programado la rotacion.

Primero, recuerda que las coocrdenadas de un punto rotado (x',y') por un angulo t esta relacionado con el punto sin rotar de la siguiente manera:

entonces puedes encontrar algo asi como la formula inversa (relacion de (x,y) con (x',y')) (aqui solo pongo la formula):
x=cos(t)*x'-sin(t)*y'
y=sin(t)*x'+cos(t)*y'
Entonces, para llenar una matriz R con la rotacion de la imagen original I (aqui R e I se consideran float **) usas lo siguiente:
Código:
int x,y,x',y';
int nr,nc;  //numero de renglones, numero de columnas
float t;
for(x'=0;x'<nr;x'++)
for(y'=0;y'<nc;y'++)
   {
   x=cos(t)*x'-sin(t)*y'
   y=sin(t)*x'+cos(t)*y'
   if((x>=0) && (y>=0) &&(x<nr)&&(y<nc))
      R[x'][y']=I[x][y];
   else
      R[x'][y']=0;//aqui le pones un valor que quieras
   }
Calcular la matriz rotada de esta forma evita que tenga "huecos" la imagen R, los cuales paarecen si realizas la trasformacion rotacion de manera directa (rotando un punto (x,y)).

Bueno, lo que te puse arriba te puede ayudar a crear tu funcion rotacion. Si acaso le falta el detalle de que si quieres que rote en cierto punto (por ejemplo el centro de la imagen I), debes calcular una traslacion primero.

Saludos
__________________
Mis pininos en blogs: prog en C, cursos

Última edición por antoniog; 25/10/2009 a las 13:22
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:44.