O AppStudio Framework contém uma série de funções para extrair informações de imagens e modificá-las dentro do aplicativo.
Objetos de imagem
As imagens podem ser exibidas em um aplicativo através do uso de um objeto de Imagem, que pode então suportar outros parâmetros para alterar a exibição da imagem. A propriedade source fornece a localização da imagem para exibição, enquanto outras propriedades descrevem as formas nas quais a imagem será exibida. A seguinte amostra de código exibe uma imagem específica de forma a preservar sua razão de aspecto e alinha com o centro horizontal e vertical do elemento de layout onde reside:
Esta amostra de código exibe uma imagem específica de forma a preservar sua razão de aspecto e alinha com o centro horizontal e vertical do elemento de layout onde reside.
Image {
fillMode: Image.PreserveAspectFit
source: "Example.png"
horizontalAlignment: Image.AlignHCenter
verticalAlignment: Image.AlignVCenter
cache: false
}
}
Para um trabalho mais complexo com imagens, o componente ImageObject fornece uma série de ferramentas para inspecionar as propriedades de uma imagem ou transformar uma imagem. O componente ImageObject armazena sua própria imagem por padrão. A seguinte amostra de código demonstra a conexão de ImageObject a uma imagem exibida fornecida em outro 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 amostra de código utiliza a função rotate do ImageObject em dois botões, para girar a imagem noventa graus em qualquer direção.
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
}
}
O componente ImageObject contém várias funções com nomes semelhantes, normalmente diferem somente por tempo; por exemplo, mirror e mirrored. Nestes casos, há uma diferença de comportamento. Funções com nomes de tempo presentes fazem as alterações diretamente no objeto de imagem existente, enquanto as funções com nomes de tempo passados fazem as alterações em uma cópia do objeto de imagem.
Metadados Exif
As imagens também podem incluir metadados Exif, uma série de tags que contêm informações sobre a própria imagem. Grande parte destes metadatas é fornecida automaticamente em fotos tiradas por câmeras modernas e pode incluir informações de GPS para descrever a localização da imagem. O AppStudio Framework é capaz de ler e escrever estas tags utilizando o componente ExifInfo.
O AppStudio Framework pode trabalhar com os seguintes três tipos de tag Exif:
- Tags de imagem, como resolução, data e hora criadas e descrição
- Tags estendidas, como fonte de luz, velocidade do obturador e modo de exposição
- Tags de GPS , como latitude, velocidade, e datum do mapa
A seguinte amostra de código mostra como exibir as tags Exif tiradas de uma imagem selecionada através de uma caixa de diálogo do arquivo, que pode ser reescrita. Esta amostra usa latitude, longitude e altitude, mas pode ser modificada para outros metadados. 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();
}
}
}