/// <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); } } }
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); } }
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(); } }