Create the functionality to use images from the phone / take image with my phone for my Windows Phone App 'The Manual Automatic"
First setup in part 1:
The setup of the DataModel in part 2:
Using the FilePicker in part 3:
Saving and Loading images from and to a byte array in part 4:
Since in part 4 my efforts to store the images in a byte array backfired I decided to store the images in the local folder of my app.
In this post the goal would be to create a copy of the original image, store it in the local storage and store the imagename in my datamodel.
Step one - Modify the datamodel
In my datamodel I leave out the byte array and put in a string to store the only image name:
When storing the manual the Name of the image is saved.
In my ImageHelpers class I defined the public static variable for the location where I want to store the images and one with the default image.
I used this page:
Step two - Copy the image
I want the images to be put in a seperate folder in my local app storage.
For some general function when working with the files and directory I create a Helper class named FileHelpers.
I have got the methods here, one to check if a file exists and one to check if a directory exists.
I used this page:
When adding a Manual, I check if the Directory is available, if not I create it and set the 'localFolder' to that directory:
//Create a copy of the picture
//Check for directory
bool folderExists = await FileHelpers.DoesFolderExistAsync(ImageHelpers.imagesFolder);
//change to the image subfolder
StorageFolder localFolder = await Windows.Storage.ApplicationData.Current.LocalFolder.GetFolderAsync(ImageHelpers.imagesFolder);
//check for fileexists in the subfolder
bool duplicateCheck = await FileHelpers.DoesFileExistAsync(imageFile.Name, localFolder);
//If file does not exists copy it
//bmp = await ImageHelpers.LoadImage(imageFile);
storeImageName = imageFile.Name;
If th file exists I add a timestamp to the filename and rename the file, This rename action also copies the file
//Since the source is readonly, put it in a temp file, because we want to rename it.
StorageFile tempFile = await localFolder.GetFileAsync(imageFile.Name);
//Alter the Name with a unique timestamp number
DateTime unixEpoch = new DateTime(1970, 1, 1);
DateTime currentDate = DateTime.Now;
long totalMiliSecond = (currentDate.Ticks - unixEpoch.Ticks) / 10000;
string fileName = origDisplayName + "_" + totalMiliSecond.ToString() + tempFile.FileType.ToString();
//The RenameAsync line also copies the file
storeImageName = fileName;
And finally I call the AddManual method in the Datamodel:
App.DataModel.AddManual(manualNameTextBox.Text, manualDescriptionTextBox.Text, storeImageName);
Step three - Testing
In order to test this I first used the command line tool to check the Isolated Storage of my app.
I used: https://msdn.microsoft.com/en-us/library/windows/apps/hh286408(v=vs.105).aspx to check the file from a command line.
But then I came across this nifty tool: https://isostorespy.codeplex.com/
Does the same but then with a nice GUI :)
So I checked if the directory was created, the file was copied and if, in case of duplicate names, the name was altered correctly.
Works like a charm, very nice tool.
Next post will be on completing the app and various modifications I did.