示例#1
0
 /// <summary>
 /// Return Exif thumbnail for jpegs.
 /// </summary>
 /// <param name="fileName">Jpeg filename</param>
 /// <returns>Bitmap, null if anything goes wrong</returns>
 protected static Bitmap GetExifThumbnail(string fileName)
 {
     var s = Path.GetExtension(fileName);
     if (s == null || !File.Exists(fileName)) return null;
     var ext = s.ToLower();
     if (!IsJpeg(ext)) return null;
     var reader = new ExifReader(fileName);
     var bitmapBytes = reader.GetJpegThumbnailBytes();
     return bitmapBytes != null && bitmapBytes.Length > 0 ? new Bitmap(new MemoryStream(bitmapBytes)) : null;
 }
 private void DisplayThumbnail(ExifReader reader)
 {
     var thumbnailBytes = reader.GetJpegThumbnailBytes();
     uiThumbnailPictureBox.Image = null;
     if (thumbnailBytes != null)
     {
         using (var stream = new MemoryStream(thumbnailBytes))
         {
             uiThumbnailPictureBox.Image = Image.FromStream(stream);
         }
     }
 }
示例#3
0
        private void btnPopulate_Click(object sender, EventArgs e)
        {
            if (!File.Exists(txtFileName.Text))
            {
                MessageBox.Show(this, "Please enter a valid filename", "File not found", MessageBoxButtons.OK);
                return;
            }

            try
            {
                using (var reader = new ExifReader(txtFileName.Text))
                {
                    // Get the image thumbnail (if present)
                    var thumbnailBytes = reader.GetJpegThumbnailBytes();

                    if (thumbnailBytes == null)
                        pictureBoxThumbnail.Image = null;
                    else
                    {
                        using (var stream = new MemoryStream(thumbnailBytes))
                            pictureBoxThumbnail.Image = Image.FromStream(stream);
                    }

                    // To read a single field, use code like this:
                    /*
                    DateTime datePictureTaken;
                    if (reader.GetTagValue(ExifTags.DateTimeDigitized, out datePictureTaken))
                    {
                        MessageBox.Show(this, string.Format("The picture was taken on {0}", datePictureTaken), "Image information", MessageBoxButtons.OK);
                    }
                    */

                    // Parse through all available fields and generate key-value labels
                    var props = Enum.GetValues(typeof (ExifTags)).Cast<ushort>().Select(tagID =>
                        {
                            object val;
                            if (reader.GetTagValue(tagID, out val))
                            {
                                // Special case - some doubles are encoded as TIFF rationals. These
                                // items can be retrieved as 2 element arrays of {numerator, denominator}
                                if (val is double)
                                {
                                    int[] rational;
                                    if (reader.GetTagValue(tagID, out rational))
                                        val = string.Format("{0} ({1}/{2})", val, rational[0], rational[1]);
                                }

                                return string.Format("{0}: {1}", Enum.GetName(typeof (ExifTags), tagID), RenderTag(val));
                            }

                            return null;

                        }).Where(x => x != null).ToArray();

                    txtFields.Text = string.Join("\r\n", props);
                }
            }
            catch (Exception ex)
            {
                // Something didn't work!
                MessageBox.Show(this, ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
示例#4
0
        private void btnPopulate_Click(object sender, EventArgs e)
        {
            if (!File.Exists(txtFileName.Text))
            {
                MessageBox.Show(this, "Please enter a valid filename", "File not found", MessageBoxButtons.OK);
                return;
            }

            ExifReader reader = null;
            try
            {
                reader = new ExifReader(txtFileName.Text);

                // Get the image thumbnail (if present)
                var thumbnailBytes = reader.GetJpegThumbnailBytes();

                if (thumbnailBytes == null)
                    pictureBoxThumbnail.Image = null;
                else
                {
                    using (var stream = new MemoryStream(thumbnailBytes))
                        pictureBoxThumbnail.Image = Image.FromStream(stream);
                }

                // To read a single field, use code like this:
                /*
                DateTime datePictureTaken;
                if (reader.GetTagValue<DateTime>(ExifTags.DateTimeDigitized, out datePictureTaken))
                {
                    MessageBox.Show(this, string.Format("The picture was taken on {0}", datePictureTaken), "Image information", MessageBoxButtons.OK);
                }
                */

                // Parse through all available fields
                string props = "";
                foreach (ushort tagID in Enum.GetValues(typeof(ExifTags)))
                {
                    object val;
                    if (reader.GetTagValue(tagID, out val))
                    {
                        // Arrays don't render well without assistance.
                        string renderedTag;
                        if (val is Array)
                        {
                            renderedTag = "";
                            foreach (object item in (Array)val)
                                renderedTag += item + ",";
                            renderedTag = renderedTag.Substring(0, renderedTag.Length - 1);
                        }
                        else
                            renderedTag = val.ToString();

                        props += string.Format("{0}:{1}\r\n", Enum.GetName(typeof(ExifTags), tagID), renderedTag);
                    }
                }

                // Remove the last carriage return
                props = props.Substring(0, props.Length - 2);

                txtFields.Text = props;
            }
            catch (Exception ex)
            {
                // Something didn't work!
                MessageBox.Show(this, ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);

                if (reader != null)
                    reader.Dispose();
            }
        }