[Previo por Fecha] [Siguiente por Fecha] [Previo por Hilo] [Siguiente por Hilo]

[Hilos de Discusión] [Fecha] [Tema] [Autor]

Re: ayuda con Xlib



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.




[Hilos de Discusión] [Fecha] [Tema] [Autor]