/// <summary> /// Get the icon image, can only be found in icons zip file. /// </summary> /// <param name="iconID">The iconID of the image to get.</param> /// <returns>The image or null if not found.</returns> public static Image GetIconImage(int iconID) { IconID icon = IconID.GetIconID(iconID); if (icon == null) { return(null); } string iconFile = icon.iconFile; int lastSlash = iconFile.LastIndexOf('/'); iconFile = "Icons/items/" + iconFile.Substring(lastSlash + 1); if (UserData.iconsZip?.Length > 0) { // Has the image been loaded? if (images.ContainsKey(iconFile)) { // Yes, use that. return(images[iconFile]); } // No, load images. Image img = GetImageFromZIP(UserData.iconsZip, iconFile); if (img != null) { images[iconFile] = img; return(img); } } return(null); }
private byte[] GetIconBytes(IconID iconID) { byte[] bytes = null; switch (iconID) { case IconID.MUSIC_NOTE: bytes = musicNoteIcon.texture.EncodeToPNG(); break; case IconID.FACE: bytes = faceIcon.texture.EncodeToPNG(); break; case IconID.ARROW: bytes = arrowIcon.texture.EncodeToPNG(); break; } return(bytes); }
public void OnAddRecordClick() { if (pendingMessage == null) { pendingMessage = new NDEFMessage(); } NDEFRecord record = null; string value = view.TypeDropdown.options[view.TypeDropdown.value].text; NDEFRecordType type = (NDEFRecordType)Enum.Parse(typeof(NDEFRecordType), value); switch (type) { case NDEFRecordType.TEXT: string text = view.TextInput.text; string languageCode = view.LanguageCodeInput.text; if (languageCode.Length != 2) { languageCode = "en"; } TextRecord.TextEncoding textEncoding = (TextRecord.TextEncoding)view.TextEncodingDropdown.value; record = new TextRecord(text, languageCode, textEncoding); break; case NDEFRecordType.URI: string uri = view.UriInput.text; record = new UriRecord(uri); break; case NDEFRecordType.MIME_MEDIA: string mimeType = "image/png"; //We're only using png images atm IconID iconID = (IconID)view.IconDropdown.value; byte[] mimeData = GetIconBytes(iconID); record = new MimeMediaRecord(mimeType, mimeData); break; case NDEFRecordType.EXTERNAL_TYPE: string domainName = view.DomainNameInput.text; string domainType = view.DomainTypeInput.text; string domainDataString = view.DomainDataInput.text; byte[] domainData = Encoding.UTF8.GetBytes(domainDataString); //Data represents a string in this example record = new ExternalTypeRecord(domainName, domainType, domainData); break; } pendingMessage.Records.Add(record); view.UpdateNDEFMessage(pendingMessage); }
public static string PreloadImages(BackgroundWorker worker) { if (UserData.typeIconZip == null || UserData.typeIconZip?.Length == 0) { // No zip file specified. return(null); } // Get inv types and icons. worker.ReportProgress(0, "Finding needed images."); List <int> types = new List <int>(); List <int> icons = new List <int>(); List <InvMarketGroup> groups = InvMarketGroup.GetRootGroups(); while (groups.Count > 0) { InvMarketGroup group = groups[0]; groups.Remove(group); // Add icon. icons.Add(group.iconID); // Add child groups to search list. groups.AddRange(InvMarketGroup.GetGroupChildren(group.marketGroupID)); // Get types for group. List <InvType> groupTypes = InvType.GetMarketGroupTypes(group.marketGroupID); // Add types to group. foreach (InvType type in groupTypes) { if (!type.published) { continue; } types.Add(type.typeID); } } List <string> files = new List <string>(); foreach (int typeID in types) { string zipImageFile = "Types/" + typeID.ToString() + "_32.png"; files.Add(zipImageFile); } int typesComplete = 0; worker.ReportProgress(0, "Opening types Zip..."); if (UserData.typeIconZip != null && File.Exists(UserData.typeIconZip)) { FileStream fileStream = File.OpenRead(UserData.typeIconZip); ZipArchive zip = new ZipArchive(fileStream); int totalFiles = types.Count; int failedFiles = 0; int skippedFiles = 0; foreach (int typeID in types) { ZipArchiveEntry zipFile = zip.GetEntry("Types/" + typeID.ToString() + "_64.png"); if (zipFile == null) { continue; } Stream zStream = zipFile.Open(); MemoryStream memStream = new MemoryStream(); zStream.CopyTo(memStream); memStream.Position = 0; try { Image img = Image.FromStream(memStream); images[zipFile.FullName] = img; } catch (ArgumentException) { failedFiles++; skippedFiles++; } typesComplete++; if (typesComplete % 10 == 0) { double pct = (double)typesComplete / (double)totalFiles; string msg = "Loading type image files... (" + (typesComplete - skippedFiles) + " of " + totalFiles + " complete)"; if (failedFiles > 0) { msg += " (" + failedFiles + " failed.)"; } worker.ReportProgress(Math.Min((int)(pct * 50.0), 100), msg); } } } int iconsComplete = 0; worker.ReportProgress(50, "Opening icons Zip..."); if (UserData.iconsZip != null && File.Exists(UserData.iconsZip)) { // Open the zip archive. FileStream fileStream = File.OpenRead(UserData.iconsZip); ZipArchive zip = new ZipArchive(fileStream); int totalFiles = icons.Count; foreach (int iconID in icons) { IconID icon = IconID.GetIconID(iconID); if (icon == null) { continue; } // Construct image path. string iconFile = icon.iconFile; int lastSlash = iconFile.LastIndexOf('/'); iconFile = "Icons/items/" + iconFile.Substring(lastSlash + 1); // Get the file. MemoryStream memStream = new MemoryStream(); ZipArchiveEntry zipFile = zip.GetEntry(iconFile); if (zipFile == null) { continue; } Stream zStream = zipFile.Open(); zStream.CopyTo(memStream); memStream.Position = 0; try { Image img = Image.FromStream(memStream); images[iconFile] = img; } catch (ArgumentException) { } iconsComplete++; if (iconsComplete % 10 == 0) { double pct = (double)iconsComplete / (double)totalFiles; string msg = "Loading Icon image files... (" + iconsComplete + " of " + totalFiles + " complete)"; worker.ReportProgress(Math.Min((int)(pct * 50.0) + 50, 100), msg); } } } worker.ReportProgress(100, "Loaded " + typesComplete + " type images and " + iconsComplete + " icon images loaded."); return(null); }