El marco de AppStudio contiene un conjunto de funciones tanto para extraer información de imágenes como para modificarlas dentro de la aplicación.
Objetos de imagen
Las imágenes pueden mostrarse en una aplicación a través del uso de un objeto de imagen que puede asistir parámetros adicionales para modificar la visualización de la imagen. La propiedad source proporciona la ubicación de la imagen para visualizar, mientras otras propiedades describen las formas en las que se puede visualizar la imagen. La siguiente muestra de código muestra una imagen específica de manera que preserva su relación de aspecto y se alinea con el centro horizontal y vertical del elemento de diseño en el que reside:
En esta muestra de código aparece una imagen específica de manera que preserva su relación de aspecto y se alinea con el centro horizontal y vertical del elemento de diseño en el que reside.
Image {
fillMode: Image.PreserveAspectFit
source: "Example.png"
horizontalAlignment: Image.AlignHCenter
verticalAlignment: Image.AlignVCenter
cache: false
}
}
Para un trabajo más complejo con imágenes, el componente ImageObject proporciona un número de herramientas para inspeccionar las propiedades de una imagen o para transformarla. ImageObject almacena su propia imagen de forma predeterminada. La siguiente muestra de código demuestra cómo conectar ImageObject a una imagen proporcionada desde cualquier lugar:
//Create ImageObject instance
ImageObject {
id: imageObject
}
Image {
id: displayedImage
fillMode: Image.PreserveAspectFit
source: imageObject.url //Set source to URL housed by ImageObject
horizontalAlignment: Image.AlignHCenter
verticalAlignment: Image.AlignVCenter
cache: false
}
}
Esta muestra de código utiliza la función rotate de ImageObject en dos botones para rotar la imagen noventa grados en cualquier dirección.
Button {
text: "Rotate Left"
onClicked: {
imageObject.rotate(-90); //Rotates 90 degrees left
displayedImage.refresh(); //Refreshes displayed image
}
}
Button {
text: "Rotate Right"
onClicked: {
imageObject.rotate(90); //Rotates 90 degrees right
displayedImage.refresh(); //Refreshes displayed image
}
}
ImageObject contiene un número de funciones con nombres similares que normalmente solo difieren en tiempo; por ejemplo mirror y mirrored. En estos casos, existe una diferencia de comportamiento. Las funciones con nombres en tiempo presente realizan los cambios directamente al objeto de imagen existente, mientras que las funciones con nombres en tiempo pasado realizan los cambios a una copia del objeto de imagen.
Metadatos Exif
Las imágenes también pueden incluir metadatos Exif, una serie de etiquetas que contienen información de la propia imagen. Gran parte de estos metadatos se proporcionan automáticamente en fotos tomadas por cámaras modernas y pueden incluir información GPS para describir la ubicación en la que se tomó la imagen. El marco de AppStudio es capaz de leer y escribir en estas etiquetas utilizando el componente ExifInfo.
El marco de AppStudio puede funcionar con los siguientes tres tipos de etiquetas Exif:
- Etiquetas de imagen, como la resolución, fecha y hora de creación y descripción
- Etiquetas extendidas, como fuente de luz, velocidad del obturador y modo de exposición
- Etiquetas de GPS, como latitud, velocidad y datum del mapa
La siguiente muestra de código muestra cómo visualizar etiquetas Exif tomadas desde una imagen seleccionada a través de un diálogo de archivo que se puede reescribir más tarde. Esta muestra utiliza latitud, longitud y altitud pero se puede modificar por otros metadatos. FileDialog { //Creates a platform-agnostic file choosing dialog
id: loadDialog
title: "Load Image"
selectExisting: true
selectMultiple: false
nameFilters: [ "Image files (*.jpg *.png)", "All readable formats (All files (*)" ]
folder: Qt.platform.os == "ios"
? "file:assets-library://"
: AppFramework.standardPaths.standardLocations(StandardPaths.PicturesLocation)[0]
onAccepted: {
exifInfo.load(fileUrl);
}
}
ExifInfo { //Instantiates ExifInfo
id: exifInfo
}
ColumnLayout {
anchors {
fill: parent
margins: 10
}
TextField {
text: exifInfo.gpsLatitude
font.bold: true
}
TextField {
text: exifInfo.gpsLongitude
font.bold: true
}
TextField {
text: exifInfo.gpsAltitude
font.bold: true
}
Button {
text: "Load"
onClicked: {
loadDialog.open();
}
}
}