Bind images from isolated storage in windows phone 7 - windows-phone-7

I have a list box which binds a list of objects . Each object has the field image file name . Each of these images present in the isolated storage .
I have tried to implement binding of these images into the list box , I am not getting the images . Please advise on how to do this .
I have looked into many forums and unable to solve this .
Best Regards,
Yash

Store your image in isolated storage in stream rather than images and than read the stream.
It will work for you. Below is the sample code.
store images in isolated like this
using (IsolatedStorageFileStream isoStream = new IsolatedStorageFileStream("IsoStoreFile.png", FileMode.Create, isoStore))
{
//Save the image file stream rather than BitmapImage to Isolated Storage.
byte[] content = new byte[e.Result.Length];
e.Result.Read(content, 0, content.Length);
isoStream.Write(content, 0, content.Length);
isoStream.Flush();
}
Now you can open the saved file and display it in an image:
using (IsolatedStorageFile isoStore = IsolatedStorageFile.GetUserStoreForApplication())
{
using (IsolatedStorageFileStream isoStream = isoStore.OpenFile("IsoStoreFile.png", FileMode.Open))
{
BitmapImage bmp = new BitmapImage();
bmp.SetSource(isoStream);
img.Source = bmp;
}
}

Related

How to convert rad controls to images in silverlight

I'm using rad controls(charts and gridview) for developing an application,which i need to export the controls(each) into image.I have tried each control converting them into bytes format and send to webservice and converting them to images but sometime sending the byte data to service throws an error.Is any other way to convert each control into image.I have tried another way like.
Stream fileStream = File.OpenRead(#"\\HARAVEER-PC\TempImages\FlashPivot.png");
//PART 2 - use the stream to write the file output.
productChart.ExportToImage(fileStream, new Telerik.Windows.Media.Imaging.PngBitmapEncoder());
fileStream.Close();
It throwing me an error like cannot access to the folder TempImages.I have given sharing permissions to everyone but it doesn't access the folder.
Any solution is much appreciated.
private BitmapImage CreateChartImages()
{
Guid photoID = System.Guid.NewGuid();
string photolocation = #"D:\Temp\" + photoID.ToString() + ".jpg";
BitmapImage bi = new BitmapImage(new Uri(photolocation, UriKind.Absolute));
using (MemoryStream ms = new MemoryStream())
{
radChart.ExportToImage(ms, new PngBitmapEncoder());
bi.SetSource(ms);
}
return bi;
}

BitmapImage Synchronously using SetSource but for a local (project) file (or, how to get a local project file as a Stream)

I am trying to synchronously load a bitmap file into memory at a certain point in my application, and read that SetSource() will do just that (http://blogs.msdn.com/b/swick/archive/2011/04/07/image-tips-for-windows-phone-7.aspx).
However, I am used to using the UriSource property which works great for local files:
BitmapImage backgroundImage = new BitmapImage(new Uri("Background.png", UriKind.Relative));
However, the SetSource function takes a "Stream", not a Uri, and I need to load a local project file. Can you please tell me what the best way to do this is?
Here is how you do this:
Uri uri = new Uri("/YourProjectName;component/Background.png", UriKind.Relative);
StreamResourceInfo resourceInfo = Application.GetResourceStream(uri);
BitmapImage bmp = new BitmapImage();
bmp.SetSource(resourceInfo.Stream);

Save image to windows phone 7 pictures hub

I'm trying to save a selected picture in a listbox to phone's memory but i don't understand why i'm getting an "InvalidOperationException was Unhandled" error.
var filePath = "Uploads/" + fileListBox.SelectedItem;
var fileUriSource = new Uri(filePath, UriKind.Relative);
using (IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication())
{
using (IsolatedStorageFileStream fileStream = myIsolatedStorage.OpenFile(filePath.ToString(), FileMode.Open))
{
MediaLibrary mediaLibrary = new MediaLibrary();
Picture pic = mediaLibrary.SavePicture("saved" + filePath.ToString(), fileStream);
fileStream.Close();
}
}
I already search on the internet but i couldn't find any answer. Any help would be great.
Thanks!
As per MSDN:
InvalidOperationException
Exception that is thrown if SavePicture is called while the user is
tethered to a computer running .
This is because the library is locked when connected to Zune on the PC to avoid any issues with changing files during syncing.
If you must do this on a device while connected you can use the WPConnect tool instead of Zune.

Storing photos in isolated storage and reading mutiple photos with out memory consumption

I am storing photos of the users in Isolated storage and displaying them in a listbox. I used following code to retrieve image from isolated storage
BitmapImage bi = new BitmapImage();
var isoFile = IsolatedStorageFile.GetUserStoreForApplication();
if (isoFile.FileExists(imageFileName))
{
using (var imageStream = isoFile.OpenFile(
imageFileName,
FileMode.Open, FileAccess.Read))
{
//imageSource = PictureDecoder.DecodeJpeg(imageStream);
bi.SetSource(imageStream);
}
}
isoFile.Dispose();
//return imageSource;
return bi;
There are 100 of images stored.Everytime the images are loaded, it the memory consumption keeps increasing and then runs out of memory.Is there any better way to access images with less memory consumption. I used GC.Collect() even at the end of loading. It simply not working.
Is there a better way of stroing and reading images from the isolated storage ?
I let my users to save photos on the isolated storage. Is isolated storage a better option in my case ?
Stefan Wick has some great tips on working with images, including how to avoid undue memory consumption, on his blog at http://blogs.msdn.com/b/swick/archive/2011/04/07/image-tips-for-windows-phone-7.aspx
You just need to forcibly set the Image and internal BitmapImage to null to release the memory when you're done with the image.
BitmapImage bitmapImage = image.Source as BitmapImage;
bitmapImage.UriSource = null;
image.Source = null;

How can I insert an image with iTextSharp in an existing PDF?

I have an existing PDF and I can use FdFWriter to input to text boxes. It works well. Now I have an image. I have read the documentation and looked at many examples but they all create new documents and insert an image. I want to take an existing PDF and insert an image into either an image field or as the icon image of a button. I have tried but it corrupts the document.
I need to be able to take an existing document and put an image on it. I do not want to open, read, replace, and delete the original. This original changes and the name "original" only means the source file in this context. There are many PDF files like this that need an image.
Thank you for any help.
Edit - I am very thankful for the code below. It works great, but the problem for me is that the existing PDF has digital signatures on it. When the document is copied like this (into result.pdf) those signatures, while still present, have a different byte count or other item that is corrupted. This means the signatures, while they show up on result.pdf, have an icon next to them that state "invalid signature."
In case it matters I am using a Topaz signature pad to create my signatures, which has it's own security. Merely copying the PDF will not corrupt it but the process below will.
I am trying to put the image on the existing document, not a copy of it, which in this case matters.
Also, by signature, I mean handwritten, not pin numbers.
Thank you again.
EDIT - Can PdfSignatureAppearance be used for this?
EDIT - I seem to be able to do it with:
var stamper = new PdfStamper(reader, outputPdfStream,'1',true);
If you want to change the contents of an existing PDF file and add extra content such as watermarks, pagenumbers, extra headers, PdfStamper is the object you need. I have successfully used the following code to insert an image into an existing pdf file to a given absolute position:
using System.IO;
using iTextSharp.text;
using iTextSharp.text.pdf;
class Program
{
static void Main(string[] args)
{
using (Stream inputPdfStream = new FileStream("input.pdf", FileMode.Open, FileAccess.Read, FileShare.Read))
using (Stream inputImageStream = new FileStream("some_image.jpg", FileMode.Open, FileAccess.Read, FileShare.Read))
using (Stream outputPdfStream = new FileStream("result.pdf", FileMode.Create, FileAccess.Write, FileShare.None))
{
var reader = new PdfReader(inputPdfStream);
var stamper = new PdfStamper(reader, outputPdfStream);
var pdfContentByte = stamper.GetOverContent(1);
Image image = Image.GetInstance(inputImageStream);
image.SetAbsolutePosition(100, 100);
pdfContentByte.AddImage(image);
stamper.Close();
}
}
}
When you insert the image you have the possibility to resize it. You can take a look at transformation matrix in the iTextSharp documentation.
Here is a similar example whichi inserts an image on the page using the stamper:
Gmane iTex Mailing List Post
I could solve my problem by simply adding following lines to my signing code to add image
var image = iTextSharp.text.Image.GetInstance(#"C:\Users\sushil\Documents\sansign.jpg");
appearance.Acro6Layers = true;
appearance.SignatureGraphic = image;
appearance.SignatureRenderingMode = PdfSignatureAppearance.RenderingMode.GRAPHIC_AND_DESCRIPTION;
As I was signing document with visible digital signature , now I can have both image and digital signature properties side by side
in the .net core6 that uses DDD try this declare class in Infrastructure Layer
using System.IO;
using iTextSharp.text;
using iTextSharp.text.pdf;
public async Task<string> SignatureToPdf(string pathPdfFile, string
pathSignatureImage, string pathOutputName)
{
var webRootPath = hostingEnvironment.ContentRootPath;
if (!File.Exists(Path.Combine(webRootPath, pathPdfFile))) return
null;
await using Stream inputPdfStream =
new FileStream(Path.Combine(webRootPath, pathPdfFile),
FileMode.Open, FileAccess.Read, FileShare.Read);
await using Stream inputImageStream =
new FileStream(Path.Combine(webRootPath, pathSignatureImage), FileMode.Open, FileAccess.Read, FileShare.Read);
await using Stream outputPdfStream =
new FileStream(Path.Combine(webRootPath, pathOutputName),
FileMode.Create, FileAccess.Write, FileShare.None);
var reader = new PdfReader(inputPdfStream);
var stamper = new PdfStamper(reader, outputPdfStream);
var pdfContentByte = stamper.GetOverContent(1);
var image = Image.GetInstance(inputImageStream);
image.SetAbsolutePosition(100, 100);
pdfContentByte.AddImage(image);
stamper.Close();
return "ok";
}
pdftk can do this. It's not a library but you can easily call it from your code as a .exe.
See stamp and background commands:
http://www.pdflabs.com/docs/pdftk-man-page/
ref: How to do mail merge on top of a PDF?

Resources