public override void LoadFileDialog(FolderLocations folderLocation, int maxWidth, int maxHeight, int x, int y, int width, int height, string[] fileTypes, StreamLoadedCallbackMethod streamLoadedCallback) { if (streamLoadedCallback == null) return; string filename = EditorUtility.OpenFilePanel("Load file", "", generateFilterValue(fileTypes)); if (!string.IsNullOrEmpty(filename)) { if (maxWidth == 0 || maxHeight == 0 || folderLocation != FolderLocations.Pictures) { streamLoadedCallback(new FileStream(filename, FileMode.Open, FileAccess.Read), true); } else { var newStream = new MemoryStream(); try { using (var stream = new FileStream(filename, FileMode.Open, FileAccess.Read)) { IImageDecoder decoder = null; switch (Path.GetExtension(filename).ToLower()) { case ".jpg": decoder = new JpegDecoder(); break; case ".jpeg": decoder = new JpegDecoder(); break; case ".png": decoder = new PngDecoder(); break; default: Debug.LogError("Unsuported file ext type: " + Path.GetExtension(filename)); streamLoadedCallback(null, false); return; } var image = new ExtendedImage(); decoder.Decode(image, stream); var newSize = MathUtilities.FitInViewIfLarger(image.PixelWidth, image.PixelHeight, maxWidth, maxHeight); var newImage = ExtendedImage.Resize(image, (int)newSize.x, (int)newSize.y, new NearestNeighborResizer()); var encoder = new PngEncoder(); encoder.Encode(newImage, newStream); newStream.Position = 0; } } catch (Exception e) { newStream.Dispose(); newStream = null; Debug.LogError(e.Message); } finally { streamLoadedCallback(newStream, true); } } } else { streamLoadedCallback(null, false); } }
public static void LoadJpeg(this WriteableBitmap bitmap, Stream sourceStream) { JpegDecoder decoder = new JpegDecoder(); var image = new ExtendedImage(); decoder.Decode(image, sourceStream); WP7Utilities.UIThreadInvoke(() => bitmap.SetSource(image.ToStream())); }
private void btnOpen_Click(object sender, RoutedEventArgs e) { OpenFileDialog ofd = new OpenFileDialog(); ofd.Filter = "JPEG,PNG,BMPファイル (*.jpg,*.png,*.bmp)|*.jpg;*.png;*.bmp"; ofd.Multiselect = false; if (ofd.ShowDialog() != true) return; string fn = ofd.File.Name.ToLower(); IImageDecoder dec; if (fn.EndsWith(".jpg")) { dec = new JpegDecoder(); } else if (fn.EndsWith(".png")) { dec = new PngDecoder(); } else if (fn.EndsWith(".bmp")) { dec = new BmpDecoder(); } else { MessageBox.Show("エラー"); return; } try { FileStream fs = ofd.File.OpenRead(); ImageTools.Image img = new ImageTools.Image(); dec.Decode(img, fs); if (img.Width < 50 || img.Height < 50) { MessageBox.Show("画像サイズが小さすぎます"); return; } WriteableBitmap wb = new WriteableBitmap(img.Width, img.Height); byte[] data = img.GetPixels(); for (int y = 0; y < img.Height; y++) { for (int x = 0; x < img.Width; x++) { int idx = (x + y * img.Width) * 4; wb.SetPixel(x, y, Color.FromArgb(data[idx + 3], data[idx], data[idx + 1], data[idx + 2])); } } SetImage(wb); fs.Close(); } catch { MessageBox.Show("エラー"); } }