/// <summary> /// Default case that adds comment with keyword to directory /// </summary> /// <param name="directory">EpsDirectory to add extracted data to</param> /// <param name="name">String that holds name of current comment</param> /// <param name="value">String that holds value of current comment</param> private void AddToDirectory(EpsDirectory directory, string name, string value) { if (!EpsDirectory.TagIntegerMap.ContainsKey(name)) { return; } var tag = EpsDirectory.TagIntegerMap[name]; switch (tag) { case EpsDirectory.TagImageData: ExtractImageData(directory, value); break; case EpsDirectory.TagContinueLine: directory.Set(_previousTag, directory.GetString(_previousTag) + " " + value); break; default: if (EpsDirectory.TagNameMap.ContainsKey(tag) && !directory.ContainsTag(tag)) { directory.Set(tag, value); _previousTag = tag; } else { // Set previous tag to an Integer that doesn't exist in EpsDirectory _previousTag = 0; } break; } _previousTag = tag; }
/// <summary> /// Parses '%ImageData' comment which holds several values including width in px, /// height in px and color type. /// </summary> private static void ExtractImageData(EpsDirectory directory, string imageData) { // %ImageData: 1000 1000 8 3 1 1000 7 "beginimage" directory.Set(EpsDirectory.TagImageData, imageData.Trim()); var imageDataParts = imageData.Split(' '); int width = int.Parse(imageDataParts[0]); int height = int.Parse(imageDataParts[1]); int colorType = int.Parse(imageDataParts[3]); // Only add values that are not already present if (!directory.ContainsTag(EpsDirectory.TagImageWidth)) { directory.Set(EpsDirectory.TagImageWidth, width); } if (!directory.ContainsTag(EpsDirectory.TagImageHeight)) { directory.Set(EpsDirectory.TagImageHeight, height); } if (!directory.ContainsTag(EpsDirectory.TagColorType)) { directory.Set(EpsDirectory.TagColorType, colorType); } if (!directory.ContainsTag(EpsDirectory.TagRamSize)) { int bytesPerPixel = colorType switch { 1 => 1, // grayscale 2 => 3, // Lab 3 => 3, // RGB 4 => 3, // CMYK _ => 0 }; if (bytesPerPixel != 0) { directory.Set(EpsDirectory.TagRamSize, bytesPerPixel * width * height); } } }