Praca z obrazami

Środowisko AppStudio Framework zawiera tablicę funkcji służących do rozpakowywania informacji z obrazów i ich modyfikowania w aplikacji.

Obiekty obrazów

Obrazy można wyświetlać w aplikacji przy użyciu obiektu Image, który może następnie obsługiwać dalsze parametry pozwalające na zmianę sposobu wyświetlania obrazu. Właściwość source udostępnia lokalizację obrazu do wyświetlenia, podczas gdy inne właściwości opisują sposoby wyświetlania obrazu. Następujący przykładowy kod powoduje wyświetlenie konkretnego obrazu w sposób zachowujący jego proporcje i dopasowany do pionowego i poziomego środka elementu kompozycji, w którym się znajduje:

Ten przykładowy kod powoduje wyświetlenie konkretnego obrazu w sposób zachowujący jego proporcje i dopasowany do pionowego i poziomego środka elementu kompozycji, w którym się znajduje.

Image {
    fillMode: Image.PreserveAspectFit
    source: "Example.png"
    horizontalAlignment: Image.AlignHCenter
    verticalAlignment: Image.AlignVCenter
    cache: false
    }
}

Na potrzeby wykonywania bardziej złożonych operacji na obrazach komponent ImageObject udostępnia pewną liczbę narzędzi służących do sprawdzania właściwości obrazu lub jego przekształcania. Komponent ImageObject domyślnie przechowuje własny obraz. Następujący przykładowy kod demonstruje połączenie komponentu ImageObject z wyświetlonym obrazem udostępnionym w innym miejscu:

    //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
    }
}

Ten przykładowy kod używa funkcji rotate komponentu ImageObject w dwóch przyciskach do obracania obrazu o 90 stopni w dowolnym kierunku.

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

Komponent ImageObject zawiera pewną liczbę funkcji o podobnych nazwach, zwykle różniących się tylko czasem, na przykład mirror i mirrored. W tych przypadkach istnieje różnica w zachowaniu. Funkcje o nazwach w czasie teraźniejszym wprowadzają zmiany bezpośrednio w istniejącym obiekcie obrazu, podczas gdy funkcje o nazwach w czasie przeszłym wprowadzają zmiany w kopii obiektu obrazu.

Metadane Exif

Obrazy mogą również zawierać metadane Exif, czyli szereg znaczników zawierających informacje o samym obrazie. Wiele z tych metadanych jest dostarczanych automatycznie w zdjęciach wykonywanych przez nowoczesne aparaty. Mogą one zawierać informacje systemu GPS opisujące lokalizację, w której wykonano zdjęcie. Środowisko AppStudio Framework może odczytywać te znaczniki i w nich zapisywać za pomocą komponentu ExifInfo.

Środowisko AppStudio Framework może pracować z następującymi trzema typami znacznika Exif:

  • Znaczniki obrazów, takie jak rozdzielczość, data i czas utworzenia oraz opis
  • Znaczniki rozszerzone, takie jak źródło światła, czas naświetlania i tryb ekspozycji
  • Znaczniki systemu GPS, takie jak szerokość geograficzna, prędkość i układ odniesienia mapy

W następującym przykładowym kodzie przedstawiono sposób wyświetlania znaczników Exif pobranych z obrazu wybranego w oknie dialogowym pliku, który można następnie ponownie zapisać. W tym przykładzie używana jest szerokość geograficzna, długość geograficzna i wysokość, ale można go zmodyfikować pod kątem innych metadanych.

    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();
        	}
	}
}