private void init(Stream stream, GIFFrameUpdatedCallbackMethod frameUpdatedCallback) { // set gif frame update callback this.FrameUpdatedCallback = frameUpdatedCallback; // decode gif image var gifDecoder = new GifDecoder(); var image = new ExtendedImage(); gifDecoder.Decode(image, stream); // add frames and load unity textures frames = new List<TextureGIFFrame>(); var firstFrame = new TextureGIFFrame(createTexture(image.PixelWidth, image.PixelHeight, image.Pixels), TimeSpan.FromSeconds(image.DelayTime / 100d)); frames.Add(firstFrame); var lastFrame = firstFrame; foreach (var frame in image.Frames) { var newFrame = new TextureGIFFrame(createTexture(frame.PixelWidth, frame.PixelHeight, frame.Pixels), TimeSpan.FromSeconds(frame.DelayTime / 100d)); frames.Add(newFrame); if (lastFrame != null) lastFrame.nextFrame = newFrame; lastFrame = newFrame; } // set starting image CurrentFrame = frames[0]; lastFrame.nextFrame = firstFrame; }
private void DoWork(object sender, DoWorkEventArgs args) { string url = args.Argument.ToString(); string name = string.Format("image-{0}.jpg", DateTime.Now.Ticks); if (url.Contains("/") && !url.Contains("attachment.php")) { var tokens = url.Split('/'); name = tokens[tokens.Length - 1]; } HttpWebRequest request = HttpWebRequest.Create(url) as HttpWebRequest; Stream data = null; request.BeginGetResponse(state => { try { var response = request.EndGetResponse(state); data = response.GetResponseStream(); } catch (Exception ex) { Console.WriteLine(ex.Message); } finally { signal.Set(); } }, request); signal.WaitOne(App.Settings.ThreadTimeout); if (worker.CancellationPending) { args.Cancel = true; return; } if (data == null) { args.Result = Awful.Core.Models.ActionResult.Failure; return; } if (worker.CancellationPending) { args.Cancel = true; return; } IsolatedStorageFileStream fileStream = null; try { MediaLibrary lib = new MediaLibrary(); string tempFile = name; var dispatch = Deployment.Current.Dispatcher; var dispatchSignal = new AutoResetEvent(false); var store = IsolatedStorageFile.GetUserStoreForApplication(); dispatch.BeginInvoke(() => { try { if (store.FileExists(tempFile)) store.DeleteFile(tempFile); fileStream = store.CreateFile(tempFile); WriteableBitmap bitmap; try { var decoder = new GifDecoder(); var image = new ExtendedImage(); decoder.Decode(image, data); bitmap = image.ToBitmap(); } catch (Exception ex) { var image = new BitmapImage(); image.SetSource(data); bitmap = new WriteableBitmap(image); } bitmap.SaveJpeg(fileStream, bitmap.PixelWidth, bitmap.PixelHeight, 0, 100); fileStream.Close(); dispatchSignal.Set(); } catch (Exception ex) { dispatchSignal.Set(); } }); dispatchSignal.WaitOne(); fileStream = store.OpenFile(tempFile, FileMode.Open, FileAccess.Read); lib.SavePicture(name, fileStream); fileStream.Close(); store.DeleteFile(tempFile); args.Result = Awful.Core.Models.ActionResult.Success; } catch (Exception ex) { if (fileStream != null) fileStream.Close(); Console.WriteLine(ex.Message); args.Result = Awful.Core.Models.ActionResult.Failure; } }
private ArticleImage CreateFakeArticleImage(Chapter chapter) { var image = new ArticleImage(); // image.Chapter = chapter; var bitMapImage = new BitmapImage(); GifDecoder gd = new GifDecoder(); var img = new ImageTools.ExtendedImage(); gd.Decode(img, Application.GetResourceStream( new Uri("/SmartReader.Library;component/Resource/8004887.gif", UriKind.Relative) ).Stream); var png = new PngEncoder(); BitmapImage bitmap = new BitmapImage(); bitmap.CreateOptions = BitmapCreateOptions.None; using (MemoryStream stream = new MemoryStream()) { png.Encode(img, stream); bitmap.SetSource(stream); } image.ImageBytes = ConvertToBytes(bitmap); Storage.SaveArticleImages(new[] { image }); return image; }