| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
amas2 Lt

Registrado: 01 Jun 2004Mensajes: 91
|
Publicado: Mar 19 Oct, 2004 5:03 pm Asunto: Rotar Imagen |
|
|
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 |
|
 |
Felip Master

Registrado: 09 Jun 2004Mensajes: 200
|
|
| Volver arriba |
|
 |
Invitado
|
Publicado: Mie 20 Oct, 2004 3:21 pm Asunto: Gracias |
|
|
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 |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Jue 21 Oct, 2004 4:50 pm Asunto: |
|
|
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 |
|
 |
amas2 Lt

Registrado: 01 Jun 2004Mensajes: 91
|
Publicado: Vie 22 Oct, 2004 7:01 pm Asunto: Gracias otra vez. |
|
|
Cojonudo!! me va perfecto. Eso si, no entiendo el codigo, pero es lo que buscaba. Voy con prisas.
_LEO Gracias de nuevo!! |
|
| Volver arriba |
|
 |
|