[Previo por Fecha] [Siguiente por Fecha] [Previo por Hilo] [Siguiente por Hilo]
[Hilos de Discusión] [Fecha] [Tema] [Autor]On Sat, 12 Sep 1998, Miguel de Icaza wrote: > Basicamente, estás perdiendo casi la mitad de la velocidad en el > mempcy que estás haciendo: > > 1. Mueve la información en un solo golpe (sin el memcpy) Pues asi quedo la 3era version: int transforma3(XImage *ximage, unsigned int owidth, unsigned long oheight) { int x,y,offset=0; unsigned short pixel; for (y=0; y<((int)oheight - 1); y++) { offset++; for(x=offset; x<(int)oheight; x++) { pixel = *((unsigned short *)ximage->data+((x * (int)owidth)+y)); *((unsigned short *)ximage->data+((x * (int)owidth)+y)) = *((unsigned short *)ximage->data+((y * (int)owidth)+x)); *((unsigned short *)ximage->data+((y * (int)owidth)+x)) = pixel; } } return 0; } > 2. No uses multiplicaciones, usa sumas (no las necesitas, > ya que el loop de adentro de puede usar para sumar > elementos y el externo para avanzar lineas). X-acto, el problema es que lo que estoy haciendo es "swapear" los pixeles, i.e. (x,y)<->(y,x). Ahora bien, si y avanza lineas y x puntos, todo esta bien para obtener el offset de (x,y), pero el pedo es obtener (y,x). De cualquier manera ya no uso el memcpy (en efecto sobraba), y hago la mitad de las * (pues mato 2 pajaros de 1 tiro en cada iter). Creo que la velocidad ya esta chida. De cualquier manera podras notar que hay un grave error en todo esto: Al rotar la imagen 90º estoy perdiendo el pedazo de x que se pasa de y, pues de otro modo el asunto ya no solo seria cuestion de rotar la imagen, sino de definir un nuevo drawable (o como se llame) y eso ya es mucho pancho para lo que estoy haciendo. Una duda: ¿es necesario tanto cast? Por ejemplo en: pixel = *((unsigned short *)ximage->data+((x * (int)owidth)+y)); pixel es un short, mientras que ximage->data es un *char, ahora bien si asigno un *char a un *short sin el cast, el compilador copia 16 bits, o solo los 8 bits del char, y en este ulimo caso, ¿los copia al msb o al lsb?... en fin, disculpen tanto atosigue con esto, cosa de ir aprendiendo... Salu2, Raymond.