Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - eferion

#521
Cita de: amchacon en 25 Abril 2014, 11:57 AM
Hombre claro que se puede obtener, pero te tienes que estudiar como comprime JPEG. Que no es fácil:
http://es.wikipedia.org/wiki/Joint_Photographic_Experts_Group

Insisto en que empiezes con BMP. Los pixeles de la imagen no están comprimidos y se pueden sacar fácilmente, lo más complicado es interpretar la cabecera (y de eso ya hay manuales en internet que te explican como está organizada).

El formato xpm también es una opción asequible para empezar.
#522
edita tu mensaje... decora el código con las etiquetas GeSHi y luego empezamos a hablar
#523
la librería estándard de C no dispone de funciones para trabajar con imágenes.
#524
La salida da 111 porque devuelvo un valor constante... si accediese a miembros el resultado habría sido muy diferente.

A ver, esta versión si debería dar los problemas que comento... estoy con el movil y no puedo compilar. Si ves algún problema avísame.

Código (cpp) [Seleccionar]

#include <iostream>

class POO
{
  int variable;

 public:
   POO( ) : variable( 1 )
   { }

   int Valor( ) { return variable; }
};

void Func( POO& clase )
{
 std::cout << clase.Valor( );
}

int main( )
{
 POO* clase = 0;

 // Error en tiempo de ejecucion
 Func( *clase );

 clase = new POO( );

 // ok
 Func( *clase );

 delete clase;

 // Esto es peligroso con punteros o referencias
 // Lo mejor que te puede pasar es un error en tiempo de ejecucion.
 Func( *clase );
}
#525
Cita de: nolasco281 en 24 Abril 2014, 10:35 AM
;-) simplemente

Mil gracias

ha una ultima cosa

en esta parte

Código (cpp) [Seleccionar]
// Error en tiempo de ejecucion
Func( &clase );


es de ejecucion o de compilacion.

ya que me dice

Código (cpp) [Seleccionar]
[Error] invalid initialization of non-const reference of type 'POO&' from an rvalue of type 'POO**'

Gracias saludos

cierto... me confundí de carácter... cosas de escribir desde el movil.

Tendría que ser Func( *clase );
#526
Tienes que tener en cuenta que, como has observado, el código que he puesto no hace ninguna comprobación que verifique que el arreglo es válido o que se especifica un tamaño válido.

Esta clase puede evolucionar bastante, pero eso ya depende de tus necesidades.

Pd.: Si en vez de arreglos son clases, una forma sencilla de asegurarte de que te pasan valores válidos es hacer que la función trabaje por referencia... no se pueden pasar referencias no válidas salvo que se hagan chapuzas adrede:

Código (cpp) [Seleccionar]


class POO
{
  public:
    int Valor( ) { return 1; }
};

void Func( POO& clase )
{
  cout << clase.Valor( );
}

int main( )
{
  POO* clase = 0;

  // Error en tiempo de ejecucion
  Func( &clase );

  clase = new POO( );

  // ok
  Func( &clase );

  delete clase;

  // Esto es peligroso con punteros o referencias
  // Lo mejor que te puede pasar es un error en tiempo de ejecucion.
  Func( &clase );
}
#527
Código (cpp) [Seleccionar]

Arreglo::Arreglo(int tamano, int* arreglo)
{
  this->arreglo = 0;

  SetArreglo( tamano, arreglo );
}

Arreglo::~Arreglo( )
{
  delete[] arreglo;
}

//Metodos Get y set
void Arreglo::setTamano(int tamano)
{
  if ( tamano != this->tamano )
  {
    this->tamano = tamano;

    delete[] arreglo;
    arreglo = new arreglo[ tamano ];
  }
}

void Arreglo::setArreglo( int tamano, int* arreglo )
{
  if ( this->arreglo != 0 )
    delete[] this->arreglo;

  this->arreglo = arreglo;
  this->tamano = tamano;
}

int Arreglo::getTamano() const
{
  return tamano;
}

int* Arreglo::getArreglo() const
{
  return arreglo;
}
#528
Cita de: engel lex en 24 Abril 2014, 01:34 AM
tu codigo tiene muchos errores :s como compila?

Directamente no compila. No se ha molestado ni tan siquiera en corregir los errores de compilación:

Código (cpp) [Seleccionar]

   int e=100;

   double v[e];
   double u[e];


Para que esto compile, "e" debe ser constante... y no lo es... o pones "e" como constante o usas new y delete para crear y destruir los vectores.

Código (cpp) [Seleccionar]
if (u==2){

u es un arreglo... no se puede comparar con un entero así por las buenas... no tiene sentido... ¿Qué intentas comprobar aquí? ¿La posición de memoria? ¿El valor del primer elemento de "u"?

Código (cpp) [Seleccionar]
u=0;}

Lo mismo que en el apartado anterior. "u" es un arreglo o vector... ¿Pretendes cambiar el valor de algún elemento concreto? ¿La dirección apuntada por el arreglo? ¿?

Código (cpp) [Seleccionar]

v = rand () % (N-M+1) + M;
u = rand () % (T-Y+1) + Y;


No puedes convertir así a bote pronto un entero en un arreglo... estamos ante el mismo problema que en los dos casos anteriores... para acceder a una posición concreta de un arreglo, en tu caso "u" y "v", tienes que usar un índice ( u[0]=3, almacenamos un 3 en la primera posición del vector "u" )... obviamente ese índice puede venir dado por una variable:

Código (cpp) [Seleccionar]

for ( int i=0; i < 4; i++ )
 u[ i ] = i * 2;


Además de todo esto, no queda claro si los valores de 1 y -1 vienen determinados por alguna expresión matemática o, como se puede intentar adivinar, simple azar.

Para sacar únicamente valores 1 y -1 hay varias opciones:

Código (cpp) [Seleccionar]

// una opcion
v[ i ] = ( rand( ) % 2 ) ? 1 : -1;

// otra
int valores[] = { 1, -1 };
v[ i ] = valores[ rand( ) % 2 ];

// otra
v[ i ] = -1 + 2 * ( rand( ) % 2 );

// esta suponiendo que v es un vector de tipo int, no float
v[ i ] = 1 ^ ( 0xFFFFFFFE * ( rand( ) % 2 ) );


No hay límites a la imaginación.


#529
Yo he usado openCV y, la verdad, se pueden cargar imágenes y demás... pero es una librería bastante grande y está orientada más a reconocimiento óptico y tratamiento digital de imágenes... eso no quita que no puedas crear una imagen de cero con tus propias rutinas... pero es un poco como matar moscas a cañonazos.

Para cosas sencillas es demasiado pesada.

El resto no las he usado... dí el salto a Qt y con ésta no me hace falta buscar librerías para este tipo de menesteres.
#530
Por supuesto que se pueden manejar... pero claro, "imagen" es un concepto muy amplio... cada formato tiene (o suele tener, depende del framework) su propia colección de funciones y sus propias característica.

C no viene preparado de forma nativa para gestionar imágenes... pero existe un amplio abanico de librerías que te permite trabajar con ellas: ImageMagic, CImg, OpenCV...