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 - amchacon

#51
Cita de: Drewermerc en 24 Abril 2014, 18:45 PMy bueno por eso quisiera saber si se pueden manejar imagenes en c sin librerias externas.
Te lo acabo de demostrar, toda mi librería está hecha con la librería estándar. Sin librerías externas.

Cita de: Drewermerc en 24 Abril 2014, 18:45 PMy bueno una pregunta mas e estado investigando sobre todo este tema de manejo de imagen y me encontre un procedimiento para comparar imagenes donde consiste en literarmente partir la imgen como si fuera una tabla comomuestro  acontinuacion espeor que me entiendan, y bueno mediante cooordenadas usando los pixeles se ve si la otra imagen coinside entonces las imagenes son iguales y si varia un poco decir ue se parecen. bueno nose si me entendienron y espeor que me puedan ayudar.
Pues claro, ese es el procedimiento que se usa siempre. Dos imagenes son iguales si tienen el mismo tamaño y el color de sus pixeles son iguales.

El problema es descodificar el archivo de la imagen para obtener la tabla. Algunos formatos son más sencillos que otros.

Cita de: Drewermerc en 24 Abril 2014, 18:45 PMy bueno nose si me puedan ayudar con esto, quiero manejar imagenes jpeg y es que bueno me enseñaron un video que dura poco tiempo y no muestra el codigo completo pero donde muestra como abre la imagen en c y obtiene algo que se llama JPEG Standard and Quantization Tables de la imagen
JPEG es un formato chungo, intentalo mejor con BMP.

Aquí tienes una explicación de como funciona el BMP:
http://www.elotrolado.net/hilo_imagenes-bmp-destripandolas-a-fondo_1807836
#52
Por supuesto, yo me hize una minilibrería de imagenes para prácticar (C++). Solo reconoce imagenes BMP pero bueno:
https://dl.dropboxusercontent.com/u/69551225/Libreria%20imagenes.rar

Creas dos objetos imagen y los comparas con el operador ==. Si da true esque son iguales.

Te dejo un listado de las funciones públicas

Código (cpp) [Seleccionar]
using namespace AMC; // Todas las funciones estan en el espacio de nombres AMC

Image* LeerBmp(const char*); // Devuelve un objeto Image a partir de un BMP

/** Class IMAGE **/

Image(Cord Dimensiones = Cord(0,0),RGB color = RGB::default_color()); // Constructor para crear una imagen desde cero

void trunc(Cord,RGB color = RGB::default_color()); // Fuerza un determinado tamanyo a la imagen, si la imagen es mas grande se colorearan los nuevos pixeles con lo que pongas en el segundo tamanyo.

int getLight() const; // Brillo actual de la imagen (entre -255 y 255), si no lo has cambiado será cero
Cord getDimesions() const; // Retorna un objeto Cord con las dimensiones de la imagne
RGB getPixel(Cord a) const; // Retorna el RGB de una posicion dada
std::vector<RGB> getRow(unsigned int) const; // Retorna un vector con los pixeles de una fila
std::vector<RGB> getColumn(unsigned int) const; // Retorna un vector con los pixeles de la columna

void setLight(int b); // Selecciona el brillo (entre -255 y 255)
void setPixel(Cord a,RGB color) ; // Pinta un determinado pixel de un color
void Negative(); // Invierte los colores de la imagen

bool operator==(const Image &a) const; // Las imagenes son iguales?
bool operator!=(const Image &a) const; // Las imagenes son distintas?

/** Class Cord **/

// Representa un vector X,Y

Cord(unsigned int x,unsigned int y); // Constructor

unsigned int getX() const;
unsigned int getY() const;
void setX(unsigned int);
void setY(unsigned int);

bool operator==(const Cord) const;
bool operator!=(const Cord a) const;


/** Class RGB **/

RGB(); // Construye el color negro
RGB(int); // Construye un color a partir de su representación entera
RGB(int r,int g,int b); // Construye un color a partir de sus valores de Rojo, verde y azul
RGB(const RGB & r); // Copia

void setR(int r);
void setG(int g);
void setB(int b);

int getR() const {return R;}
int getG() const {return G;}
int getB() const {return B;}
int getInt() const; // Representación de los tres colores en formato entero

operator int();

bool operator==(const RGB & a) const;
bool operator==(int a) const;
bool operator!=(const RGB & a) const;
bool operator!=(int a) const;
#53
Cita de: ivancea96 en 23 Abril 2014, 15:02 PM
En verdad, no le veo la utilidad a un parámetro del tipo:
Código (cpp) [Seleccionar]
int funcion ( int matriz[][9]){...}

Pudiendo pasar:
Código (cpp) [Seleccionar]
int funcion ( int **matriz){...}

Hay alguna ganancia? Se puede pasar una matriz a cualquiera de ellos. Es más, se detecta como una redefinición en caso de poner:

Código (cpp) [Seleccionar]
void f(int *m[5]){
}
void f(int **m){
}


No se sobrecarga.
La diferencia en que una definición espera una matriz estatica y otra definición espera punteros de punteros.

A la seguna definición no le puedes pasar una matriz estatica:
Citarerror: cannot convert 'int (*)[9]' to 'int**' for argument '1' to 'void f(int**)'|

Las matrices estáticas no se almacenan como punteros de punteros, sino como un array muy largo. Es el compilador quien traduce los dos [] [] por uno solo []. Para hacer eso necesita saber el tamaño del primero.
#54
No no, he dicho fprintf. Con la F al principio.
#55
No es eso Engel Lex, el problema esque está escribiendo la estructura literal. Y ahí no hay ningun texto (solo "punteros" a texto).

Para imprimir texto debes usar fprintf, se usa igual que el printf pero poniendo el correspondiente FILE* en el primer argumento.
#56
Cambia primero los datos en memoria y cuando vayas a guardar reescribes todos y punto.
#57
Programación C/C++ / Re: operador ~
23 Abril 2014, 01:35 AM
Cierto, los floats no van.

Cita de: Blaster en 23 Abril 2014, 00:22 AMEl complemento a uno es el unico operador unario los demas son todos binarios este operador lo que hace es invertir cada bit del número.

Saludos..
¿Que hay de la negación lógica (!), de la indirreción (*), de la referencia (&), del sizeof y del delete? ;D
#58
Programación C/C++ / Re: operador ~
22 Abril 2014, 23:44 PM
Hasta donde se, se puede usar con cualquier dato primitivo (float incluido).
#59
La primera linea no va a compilar...

Y si compila no va a aceptar matrices estaticas. Solo las que se han creado dinámicamente.
#60
Tamaño fila debe conocerse durante la compilación. Por lo que no puede ser una variable global que tengas por ahi (aunque una constante si valdria).

Si estas en C++. Puedes hacer un vector de vector. Asi no te lias ;)