domingo, 25 de septiembre de 2011

Qt + manipulación de imágenes

Como muchos de mis "seguidores" saben. Yo adoro C++ y QT cuando a programación en linux respecta. La cancha esta bastante clara para mi.

1. Qt tiene mejor documentación ( assistant - Programa de ayuda)
2. Es nativo en c++
3. El 90% de todo tiene ejemplos en codigo
4. El IDE QDevelop es una maravilla.

En fin muchas cosas que algún día escribiré una entrada sobre por que QT es "chiva".Sin embargo no opaca GTK aunque a titulo personal no me gusta.

Hoy he estado haciendo pruebas conceptuales (Pequeños programas) para desarrollar un programa para mi mama.

En mi viaje me encontré con la manipulación de imagen.
Ya había usado manipulación de imágenes anteriormente en QT, algo bastante sencillo pero me daba la idea de por donde buscar. Además en lo de manipulación de imágenes se respecta yo tengo mucha experiencia en Java.

Qt tiene varios clases de manipulación de imágenes para distintos niveles.

QImage:
Esta provee de un set de métodos para manipulación a nivel de Pixel.

QImage ImageDialog::verticalrotation(QImage source_image){
    QImage new_image(source_image.width(), source_image.height(), source_image.format());
    int height_subtraction = source_image.height() - 1;
    for(int x = 0; x < source_image.width(); ++x)
        for(int y = 0; y < source_image.height(); ++y)
            new_image.setPixel(x, height_subtraction - y, source_image.pixel(x, y));
    return new_image;
}
QPixmap:
Esta provee una serie de métodos para realizar transformación de nivel mas alto. Puede ser rotaciones, dimensionar, cortar partes de images, entre otras.
//Corta una sección de una imagen más grande 
QPixmap test = QPixmap(QString::fromUtf8("/home/koza/47411-bigthumbnail.jpg"));
QPixmap chunk = test.copy(10,10,100,100);
label->setPixmap(chunk);
QPainter:
Esta clase provee manipulación de utilitarios. Metodos como dibujar texto, eclipces, rectangulos. Es muy semejante a Ghaphics2D de java.
QPixmap pic(QPixmap::fromMimeSource( "camera.png" ));
QPainter paint;
paint.begin(&pic);
paint.setPen( Qt::blue );
paint.drawText( rect(), AlignCenter, string);
paint.end(); 
mPixLbl->setPixmap(pic);

Convertir de un tipo a otro es relativamente sencillo.  No voy a poner los detalles acá. Sin embargo es bueno comentar que existe una serie de clases para manipulación de imágenes.

Solo resta decir que escoger la clase adecuada depende de lo que se quiera programar.

2 comentarios:

  1. Bueno hola antes que todo soy un estudiante de informatica y me gustaria saber como puedo modificarle el brillo y el contraste a una imagen en Qt ,ya que el mismo me es importante para la tesis y hasta ahora todo lo que he encontrado es en java,Cchar,C pero nada en Qt,para cualquier forma de ubicarme puede escribirme a ugcorreoso@estudiantes.grm.uci.cu,por favor ayudeme que es muy importante para mi.

    ResponderEliminar
  2. Creo que Qt es bastante poderoso e interesante, pero si me preguntan Qt debiese ser para desarrollar interfaces y quedarse ahí, por que para el resto del sistema está C/C++. Otra cosa, si es para trabajar con procesamiento de imágenes es mejor utilizar OpenCV, que es una biblioteca que está diseñada para el procesamiento de imágenes. De cualquier forma, buen aporte el tuyo.

    Saludos

    ResponderEliminar

AEM hablemos del arquetipo 11

Cuando creamos un proyecto con AEM. Siempre es importante saber que arquetipo estamos usando. Pues esto me determinara que source, herramien...