private void PositionImage(ExifImage image, int index)
        {
            double delta = index - mCurrent;
            double deltaAbs = System.Math.Abs(delta);
            //double maxDrawSize = IMAGE_SIZE_FACTOR * ImageCanvas.ActualHeight;
            double maxDrawSize = MAX_IMAGE_SIZE;

            // scale image
            ScaleTransform scale = new ScaleTransform();
            double ratio = 0.0;
            if (image.PixelWidth >= image.PixelHeight)
            {
                // w > h, fit width to draw size
                ratio = maxDrawSize / image.PixelWidth;
            }
            else
            {
                // fit height to draw size
                ratio = maxDrawSize / image.PixelHeight;
            }
            scale.ScaleY = ratio * (1.0 - (deltaAbs * SCALE_DOWN_FACTOR));
            scale.ScaleX = ratio * (1.0 - (deltaAbs * SCALE_DOWN_FACTOR));
            // set the transform
            image.Image.RenderTransform = scale;

            // position the image
            double left = mCanvasCenterX - (image.PixelWidth * scale.ScaleX * 0.5) + delta * OFFSET_FACTOR;
            image.Image.SetValue(Canvas.LeftProperty, left);
            double top = mCanvasCenterY - (image.PixelHeight * scale.ScaleY * 0.5) + 95;
            image.Image.SetValue(Canvas.TopProperty, top);
            // set alpha
            image.Image.Opacity = 1.0 - (deltaAbs * OPACITY_DOWN_FACTOR);
            // z-index
            image.Image.SetValue(Canvas.ZIndexProperty, (int)(maxDrawSize * (1.0 - (deltaAbs * SCALE_DOWN_FACTOR))));
        }
Example #2
0
        private void UpdateImageInfo()
        {
            ExifImage     i  = mImages[(int)mTarget];
            StringBuilder sb = new StringBuilder(256);

            sb.AppendLine(i.ImageInfo.FileName + " (" + (i.ImageInfo.FileSize / (1 << 10)) + "KB" + ")");
            sb.AppendLine("Load time: " + i.ImageInfo.LoadTime.TotalMilliseconds + "ms");
            if (i.ImageInfo.IsValid)
            {
                sb.AppendLine("Date taken: " + i.ImageInfo.DateTime);
                if (!string.IsNullOrEmpty(i.ImageInfo.Make))
                {
                    sb.AppendLine("Make: " + i.ImageInfo.Make);
                    sb.AppendLine("Model: " + i.ImageInfo.Model);
                }
                sb.AppendLine("Dimensions: " + i.ImageInfo.Width + "x" + i.ImageInfo.Height);
                if (i.ImageInfo.ExposureTime > 0.0)
                {
                    sb.AppendLine("Exposure: " + i.ImageInfo.ExposureTime + " seconds");
                    sb.AppendLine("Flash: " + i.ImageInfo.Flash.ToString());
                }
                sb.AppendLine("Thumbnail: " + ((i.ImageInfo.ThumbnailData == null) ? "No" : "Yes"));
                if (i.ImageInfo.GpsLatitudeRef != ExifGpsLatitudeRef.Unknown)
                {
                    // format GPS info as a Google Maps URL
                    double latitude = i.ImageInfo.GpsLatitude[0] +
                                      i.ImageInfo.GpsLatitude[1] / 60.0 +
                                      i.ImageInfo.GpsLatitude[2] / 3600.0;
                    if (i.ImageInfo.GpsLatitudeRef == ExifGpsLatitudeRef.South)
                    {
                        latitude = -latitude;
                    }
                    double longitude = i.ImageInfo.GpsLongitude[0] +
                                       i.ImageInfo.GpsLongitude[1] / 60.0 +
                                       i.ImageInfo.GpsLongitude[2] / 3600.0;
                    if (i.ImageInfo.GpsLongitudeRef == ExifGpsLongitudeRef.West)
                    {
                        longitude = -longitude;
                    }
                    sb.AppendLine("http://www.bing.com/maps/?v=2&cp=" + latitude + "~" + longitude + "&lvl=16&sty=r");
                    sb.AppendLine("http://maps.google.com/maps?q=" + latitude + "," + longitude);
                }
            }
            else
            {
                sb.AppendLine("Unrecognized format");
            }
            this.ImageInfoText.Text = sb.ToString();
        }
Example #3
0
        private void AddImage(FileInfo fi)
        {
            try
            {
                DateTime    then = DateTime.Now;
                JpegInfo    info = ExifReader.ReadJpeg(fi);
                BitmapImage img  = new BitmapImage();

                if (info.ThumbnailData != null)
                {
                    // the fast way - using the Exif thumbnail for preview
                    MemoryStream ms = new MemoryStream(info.ThumbnailData);
                    img.SetSource(ms);
                }
                else
                {
                    // the slow and expensive way - loading a monster image in memory
                    img.CreateOptions = BitmapCreateOptions.None;
                    using (FileStream fs = fi.OpenRead())
                    {
                        img.SetSource(fs);
                        fs.Close();
                    }
                }

                info.LoadTime = (DateTime.Now - then);
                ExifImage image = new ExifImage(img, info);
                ImageCanvas.Children.Add(image.Image);
                int oldCount = mImages.Count;
                mImages.Add(image);
                if (oldCount == 0)
                {
                    UpdateImageInfo();
                }
            }
            catch (OutOfMemoryException)
            {
                HtmlPage.Window.Alert("You are out of memory. No more images will be loaded.");
                throw;
            }
            catch (Exception e)
            {
                // well that sucks.
                HtmlPage.Window.Alert("An error occured:\r\n" + e.ToString());
            }
            // this could be expensive, try to clean up as we go...
            GC.Collect();
        }
Example #4
0
        private void PositionImage(ExifImage image, int index)
        {
            double delta    = index - mCurrent;
            double deltaAbs = System.Math.Abs(delta);
            //double maxDrawSize = IMAGE_SIZE_FACTOR * ImageCanvas.ActualHeight;
            double maxDrawSize = MAX_IMAGE_SIZE;

            // scale image
            ScaleTransform scale = new ScaleTransform();
            double         ratio = 0.0;

            if (image.PixelWidth >= image.PixelHeight)
            {
                // w > h, fit width to draw size
                ratio = maxDrawSize / image.PixelWidth;
            }
            else
            {
                // fit height to draw size
                ratio = maxDrawSize / image.PixelHeight;
            }
            scale.ScaleY = ratio * (1.0 - (deltaAbs * SCALE_DOWN_FACTOR));
            scale.ScaleX = ratio * (1.0 - (deltaAbs * SCALE_DOWN_FACTOR));
            // set the transform
            image.Image.RenderTransform = scale;

            // position the image
            double left = mCanvasCenterX - (image.PixelWidth * scale.ScaleX * 0.5) + delta * OFFSET_FACTOR;

            image.Image.SetValue(Canvas.LeftProperty, left);
            double top = mCanvasCenterY - (image.PixelHeight * scale.ScaleY * 0.5) + 95;

            image.Image.SetValue(Canvas.TopProperty, top);
            // set alpha
            image.Image.Opacity = 1.0 - (deltaAbs * OPACITY_DOWN_FACTOR);
            // z-index
            image.Image.SetValue(Canvas.ZIndexProperty, (int)(maxDrawSize * (1.0 - (deltaAbs * SCALE_DOWN_FACTOR))));
        }
        private void AddImage(FileInfo fi)
        {
            try
            {
                DateTime then = DateTime.Now;
                JpegInfo info = ExifReader.ReadJpeg(fi);
                BitmapImage img = new BitmapImage();

                if (info.ThumbnailData != null)
                {
                    // the fast way - using the Exif thumbnail for preview
                    MemoryStream ms = new MemoryStream(info.ThumbnailData);
                    img.SetSource(ms);
                }
                else
                {
                    // the slow and expensive way - loading a monster image in memory
                    img.CreateOptions = BitmapCreateOptions.None;
                    using (FileStream fs = fi.OpenRead())
                    {
                        img.SetSource(fs);
                        fs.Close();
                    }
                }

                info.LoadTime = (DateTime.Now - then);
                ExifImage image = new ExifImage(img, info);
                ImageCanvas.Children.Add(image.Image);
                int oldCount = mImages.Count;
                mImages.Add(image);
                if (oldCount == 0) UpdateImageInfo();
            }
            catch (OutOfMemoryException)
            {
                HtmlPage.Window.Alert("You are out of memory. No more images will be loaded.");
                throw;
            }
            catch (Exception e)
            {
                // well that sucks.
                HtmlPage.Window.Alert("An error occured:\r\n" + e.ToString());
            }
            // this could be expensive, try to clean up as we go...
            GC.Collect();
        }