One thing I found on my Galaxy Note 4 though is that the images will always appear in landscape mode regardless of how you took them.
So I thought I would post some code to show you how they can be rotated.
First here is how it looks in the app.
And here is the XML and code.
<Page xmlns="http://www.nativescript.org/tns.xsd" shownModally="onShownModally" loaded="onLoaded" backgroundColor="transparent" xmlns:imageButton="helpers/buttonhelper"> <GridLayout columns="*" rows="auto,*" width="300" height="550" cssClass="popup"> <Label text="Take Photo" row="0" col="0" cssClass="popuptitle"/> <StackLayout row="1" col="0" cssClass="popupouter"> <GridLayout columns="*" rows="*,auto,auto" cssClass="popupinner" horizontalAlignment="center" verticalAlignment="center"> <Image imageSource="{{photo}}" row="0" col="0"/> <StackLayout orientation="horizontal" horizontalAlignment="center" row="1" col="0"> <imageButton:ImageButton textPadded="" tap="{{rotateLeft}}" icon="rotateleft"/> <imageButton:ImageButton textPadded="" tap="{{takePhoto}}" icon="camera"/> <imageButton:ImageButton textPadded="" tap="{{rotateRight}}" icon="rotateright"/> </StackLayout> <StackLayout orientation="horizontal" horizontalAlignment="center" row="2" col="0"> <imageButton:ImageButton textPadded="{{languageData.OK}}" tap="{{ok}}" icon="tick"/> <imageButton:ImageButton textPadded="{{languageData.Cancel}}" tap="{{cancel}}" icon="cross"/> </StackLayout> </GridLayout> </StackLayout> </GridLayout> </Page>
/* tslint:disable:use-strict triple-equals max-line-length one-line */ import observableHelper = require("../../helpers/observablehelper"); import pages = require("ui/page"); import camera = require("camera"); import imageSource = require("image-source"); import fs = require("file-system"); import enums = require("ui/enums"); export interface ICallbackResult { photo: imageSource.ImageSource } export interface ICallback { (result: ICallbackResult, success: boolean): void }; export function display(page: pages.Page, action: ICallback) { page.showModal("./dialogs/photo/photo-page", page, action); } enum fields { photo }; export class PhotoModel extends observableHelper.PopupModel<ICallbackResult, fields> { constructor() { super(fields); this.setValue(fields.photo, null); } public returnTrue() { this.returnValue = { photo: this.getValue(fields.photo) }; this.returnResult(this.returnValue, true); } public rotateRight() { var picture = <imageSource.ImageSource>this.getValue(fields.photo); if (picture != null) { var newImage = new imageSource.ImageSource(); if (picture.ios) { var cgImage = new CIImage(picture.ios); newImage.ios = picture.ios.initWithCGImageScaleOrientation(cgImage, 1, UIImageOrientation.UIImageOrientationRight); } if (picture.android) { var matrix = new android.graphics.Matrix(); matrix.postRotate(90); newImage.android = android.graphics.Bitmap.createBitmap(picture.android, 0, 0, picture.android.getWidth(), picture.android.getHeight(), matrix, true); } this.setValue(fields.photo, newImage); } } public rotateLeft() { var picture = <imageSource.ImageSource>this.getValue(fields.photo); if (picture != null) { var newImage = new imageSource.ImageSource(); if (picture.ios) { var cgImage = new CIImage(picture.ios); newImage.ios = picture.ios.initWithCGImageScaleOrientation(cgImage, 1, UIImageOrientation.UIImageOrientationLeft); } if (picture.android) { var matrix = new android.graphics.Matrix(); matrix.postRotate(-90); newImage.android = android.graphics.Bitmap.createBitmap(picture.android, 0, 0, picture.android.getWidth(), picture.android.getHeight(), matrix, true); } this.setValue(fields.photo, newImage); } } public takePhoto() { camera.takePicture({ width: 200, height: 200, keepAspectRatio: true }).then((picture) => { this.setValue(fields.photo, picture); }); } } export var viewModel = new PhotoModel();As can be seen then code is quite small. I have put in a request on github to get image rotation in the core code.
I haven't tested the functionality in IOS yet, but from reading it should work.
Good job.. i am still stuck on creating framework stuff for my apps
ReplyDeleteNice blog Peter, we are currently evaluating Nativescript for our existing apps done with Kendo UI Mobile.
ReplyDeleteJust one question: on www.physiotherapyexercises.com you guys have statistics about app downloads (?) per platform. Are they generated automatically or are you doing them manually?
Thanks,
Roman
I have a program that reads the android/ios text files that are generated from their reporting options. Once a month I download them and copy them to a directory on the server and it just updates statistics from there.
Delete