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 

TImageList... Ayuda _LEO, por favor.

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: TImageList... Ayuda _LEO, por favor. Responder citando

Hola:

Ya hice esta pregunta hace un tiempo, pero, a dia de hoy no he sido capaz de encontrar la solucion y la fecha de entrega del proyecto se termina. Vuelvo a comentar mi problema para ver si alguien me puede ayudar. He buscado en internet,foros y la bonita ayuda de borland, pero no he visto nada claro.

Problema:(
Añado imagenes(bitmaps) en un TImageList en ejecucion, si estas son muy grandes las recorta, cogiendo mas o menos 32x32 pixel. Si haces esto mismo en diseño, no problem. El te pregunta que si se ajusta, recorta o se centra. Como se hace esto en ejecucion. No creo q sea tan chungo.
gracias. Leo... echame una mano.
Volver arriba
Mensaje    Asunto: Responder citando

Hola:

Lo siento, no he podido responder antes. Supongo que a estas alturas ya habrás encontrado alguna solución. De todos modos lo pongo por si a alguien le puede ser útil o por si te puede servir para otro proyecto.

El TImageList no tiene ninguna propiedad ni ninguna manera directa de decirle que queremos que la imagen se ajuste a su tamaño, esto es solo parte de su editor de propiedades, y los editores de propiedades solo funcionan en tiempo de diseño.

Así que la solución pasa por cargar la imagen en un bitmap temporal, ajustarlo al tamaño necesario y una vez ajustado ya podemos cargarlo en el TImageList. Aquí va un pequeño ejemplo:

Código:
    TRect rect = Rect(0, 0, ImageList1->Width, ImageList1->Height);

    // Creamos un bitmap temporal donde cargaremos y ajustaremos
    //   las imagenes antes de cargarlas en el TImageList
    Graphics::TBitmap *imagen = new Graphics::TBitmap;
    // Cargamos una imagen y la ajustamos a las dimensiones del TImageList
    // En este ejemplo cargamos las imagenes desde archivos, pero también
    //   podemos leerlas de los recursos del ejecutable, etc...
    imagen->LoadFromFile("C:\\nuestroDirectorio\\imagen1.bmp");
    imagen->Canvas->StretchDraw(rect, imagen);
    imagen->Width = ImageList1->Width;
    imagen->Height = ImageList1->Height;
    // El segundo argumento es el color que queremos que sea transparente
    //   en este caso selecciono el color del pixel inferior izquierdo
    ImageList1->AddMasked(imagen, imagen->Canvas->Pixels[0][imagen->Height-1]);
    delete imagen;

    // Cargamos una segunda imagen
    imagen = new Graphics::TBitmap;
    imagen->LoadFromFile("C:\\nuestroDirectorio\\imagen2.bmp");
    imagen->Canvas->StretchDraw(rect, imagen);
    imagen->Width = ImageList1->Width;
    imagen->Height = ImageList1->Height;
    ImageList1->AddMasked(imagen, imagen->Canvas->Pixels[0][imagen->Height-1]);
    delete imagen;


y para hacer una prueba rápida para comprobar que esto funciona, podemos poner el código anterior dentro del constructor del Form y añadir el siguiente código al evento OnPaint del Form:
Código:
    for (int i=0; i<ImageList1->Count; i++)
        ImageList1->Draw(Canvas, i*(ImageList1->Width+5), 5, i);

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

Una pequeña corrección... La rutina anterior ajusta las imágenes que son mayores que las dimensiones del TImageList, pero las que son mas pequeñas las ajusta mal. En esta versión se ajustan tanto las más grandes como las más pequeñas correctamente:

Código:
    // Creamos los bitmaps temporal donde cargaremos y ajustaremos
    //   las imagenes antes de cargarlas en el TImageList
    Graphics::TBitmap *imgFuente = new Graphics::TBitmap;
    Graphics::TBitmap *imgDestino = new Graphics::TBitmap;
    imgDestino->Width = ImageList1->Width;
    imgDestino->Height = ImageList1->Height;

    // Cargamos una imagen y la ajustamos a las dimensiones del TImageList
    // En este ejemplo cargamos las imagenes desde archivos, pero también
    //   podemos leerlas de los recursos del ejecutable, etc...
    imgFuente->LoadFromFile("imagen1.bmp");
    imgDestino->Canvas->StretchDraw(
        Rect(0,0,imgDestino->Width,imgDestino->Height), imgFuente);
    // El segundo argumento es el color que queremos que sea transparente
    //   en este caso selecciono el color del pixel inferior izquierdo
    ImageList1->AddMasked(imgDestino,
        imgDestino->Canvas->Pixels[0][imgDestino->Height-1]);

    // Cargamos una segunda imagen
    imgFuente->LoadFromFile("imagen2.bmp");
    imgDestino->Canvas->StretchDraw(
        Rect(0,0,imgDestino->Width,imgDestino->Height), imgFuente);
    ImageList1->AddMasked(imgDestino,
        imgDestino->Canvas->Pixels[0][imgDestino->Height-1]);

    delete imgFuente;
    delete imgDestino;
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.