a ver si entiendo...
en bmparr esta la imagen que convertiste del archivo que cargaste..
* generalmente conviene tomar los colores como 32bits y listo , no importa si desperdicias porque usas 24 bits, si este arreglo esta alineado mejor.
conviene evitar los metodos virtuales, ya que estas decidiendo EN TIEMPO DE EJECUCION lo que podrias decidir antes, si no te queda otra inclusive te combiene hacer una funcion para cada tipo deconversion 16->32 24->32 32->32 y elegirla ANTES de entrar en cualquier bucle..
* ya que sabes que vas a usar memoria para guardar esta imagen porque no la haces global ( y sin new o delete), simplemente como estatica...
* evitar el uso de indices, quizas el pinche compilador lo optimize pero siempre es mejor controlar esto... UTILIZAR puntero !!!!
El puntero es el metodo mas veloz y directo para recorrer memoria
* evitar los contadores si tenes un puntero !!! y ya que esta indicarle al puntero que sea un registro !!!
int bmpcargado[IMAGENMASGRANDE];
int bmpconvertido[LOMISMO];
void convertir(void)
{
register int *pimg=bmpcargado;
register int *pdes=bmpconvertido;
int *pultimo=bmpcargado+tamanio;
for (;pimg<pultimo;pimg++,pdes++)
*pdes=((*pimg&0xff0000)>>16)|(*pimg&0xff00)|(*pimg&0xff)<<16);
}
quizas tiene algun error, yo ya no programo en C
pero bueno...
una duda... C# todabia tiene puntero ??? espero que si
espero te ayude...