Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Rotar Imagen

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Rotar Imagen Responder citando

Tengo que rotar de 90 grados en 90 grados una imagen (BMP,JPG), he estado buscando y todo lo que encuentro esta en Pascal, alguien me puede ayudar, estoy un poco preocupado con el dichoso rotar.

He provado el Exe de .
http://www.efg2.com/Lab/ImageProcessing/RotateScanline.htm
es perfecto pasa que el codigo es PASCAL y no tengo ni idea.


Gracias
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

http://www.efg2.com/Lab/ImageProcessing/DarrenGallagher_Builder_RotateScanline.ZIP
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Gracias Responder citando

Pero no me acaba de convencer, he visto ejemplos en que la imagen no deja de aparecer en el recuadro. O sea que solo puedes rotar de 90 en 90 pero se coloca en la misma coordenada superior izquierda.

Gracias.
Volver arriba
Mensaje    Asunto: Responder citando

El ejemplo de esa página esta muy bien, permite girar cualquier cantidad de grados, es rápida, e incluso hasta el detalle que dices que no te convence es ajustable.

De todos modos si sigue sin gustarte y solo necesitas girar de 90 en 90 grados, aquí va otra opción:
Código:
// Añadimos:  #include <memory>
void RotarImagen(TImage* imagen, bool haciaDerecha = true)
{
    std::auto_ptr<Graphics::TBitmap> bmpDest(new Graphics::TBitmap);
    Graphics::TBitmap* bmpOrig = imagen->Picture->Bitmap;
    bmpOrig->PixelFormat = pf24bit;
    bmpDest->PixelFormat = pf24bit;
    bmpDest->Width = bmpOrig->Height;
    bmpDest->Height = bmpOrig->Width;

    for (int y = 0; y < bmpOrig->Height; y++)
    {
        RGBTRIPLE* ptrOrig = static_cast<RGBTRIPLE*>(bmpOrig->ScanLine[y]);
        for (int x = 0; x < bmpOrig->Width; x++)
        {
            RGBTRIPLE* pixelOrig = ptrOrig + x;

            RGBTRIPLE* ptrDest;
            RGBTRIPLE* pixelDest;

            if (haciaDerecha)
            {
                ptrDest = static_cast<RGBTRIPLE*>(bmpDest->ScanLine[x]);
                pixelDest = ptrDest - y + bmpOrig->Height - 1;
            }
            else
            {
                ptrDest = static_cast<RGBTRIPLE*>(
                    bmpDest->ScanLine[bmpOrig->Width-x-1]);
                pixelDest = ptrDest + y;
            }

            *pixelDest = *pixelOrig;
        }
    }
    imagen->Picture->Bitmap->Assign(bmpDest.get());
}

Y un ejemplo de uso:
    RotarImagen(Image1); // Gira 90 grados hacia la _derecha_
    RotarImagen(Image1, false); // Gira 90 grados hacia la _izquierda_

Ojo! solo sirve para rotar imágenes .BMP, si cargas otro formato en el TImage no funcionara.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Gracias otra vez. Responder citando

Cojonudo!! me va perfecto. Eso si, no entiendo el codigo, pero es lo que buscaba. Voy con prisas.

_LEO Gracias de nuevo!!
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.