public void GenerateMdMiniPng() { if (!File.Exists(originalArtPath) && File.Exists(iconPath)) { using (var file = File.OpenRead(iconPath)) using (var bitmap = new SystemDrawingBitmap(new Bitmap(file) as Bitmap)) using (var fileOut = File.OpenWrite(originalArtPath)) { bitmap.TrimPixels(); bitmap.Bitmap.Save(fileOut, ImageFormat.Png); } } if (!File.Exists(mdMiniIconPath)) { if (File.Exists(originalArtPath)) { SetMdMini(originalArtPath, GameImageType.MdFront); } if (File.Exists(spinePath)) { SetMdMini(spinePath, GameImageType.MdSpine); } } }
public virtual void SetImage(Image img, bool EightBitCompression = false) { // full-size image ratio int maxX = 228; int maxY = 204; bool mdminiFormatted = false; if (File.Exists(originalArtPath)) { File.Delete(originalArtPath); } if (img.Size.Width == 182 && img.Size.Height == 216) { using (var bImage = new SystemDrawingBitmap(img.Clone() as Bitmap)) { if (bImage.EmptyRow(0) && bImage.EmptyRow(215) && bImage.EmptyColumn(0) && bImage.EmptyColumn(181) && bImage.EmptyColumn(29) && bImage.EmptyColumn(30)) { mdminiFormatted = true; using (var file = File.OpenWrite(mdMiniIconPath)) bImage.Bitmap.Save(file, ImageFormat.Png); img = bImage.Bitmap.Clone(new Rectangle(31, 1, 150, 214), PixelFormat.Format32bppArgb); } } } using (var file = File.OpenWrite(originalArtPath)) using (var copy = new Bitmap(img)) copy.Save(file, ImageFormat.Png); if (!mdminiFormatted) { SetMdMini(img as Bitmap, GameImageType.MdFront); } ProcessImage(img, iconPath, maxX, maxY, false, true, EightBitCompression); // thumbnail image ratio maxX = 40; maxY = 40; ProcessImage(img, smallIconPath, maxX, maxY, ConfigIni.Instance.CenterThumbnail, false, EightBitCompression); }
private SystemDrawingBitmap GetMdMiniBitmap(MemoryStream bitmapStream = null) { if (bitmapStream != null && bitmapStream.Length > 0) { bitmapStream.Seek(0, SeekOrigin.Begin); return(new SystemDrawingBitmap(new Bitmap(bitmapStream) as Bitmap)); } else if (File.Exists(mdMiniIconPath)) { using (var file = File.OpenRead(mdMiniIconPath)) return(new SystemDrawingBitmap(new Bitmap(file) as Bitmap)); } else { var template = new SystemDrawingBitmap(new Bitmap(182, 216, PixelFormat.Format32bppArgb) as Bitmap); return(template); } }
public Tasker.Conclusion ScrapeGames(Tasker tasker, Object syncObject = null) { if (Program.TheGamesDBAPI == null) { return(Tasker.Conclusion.Success); } try { var idList = new Dictionary <UInt32, int>(); foreach (var app in NewGames) { if (app.Metadata.OriginalCrc32 != 0 && data.GamesDB.HashLookup.ContainsKey(app.Metadata.OriginalCrc32) && data.GamesDB.HashLookup[app.Metadata.OriginalCrc32].TgdbId.Count > 0) { if (!idList.ContainsKey(app.Metadata.OriginalCrc32)) { idList.Add(app.Metadata.OriginalCrc32, data.GamesDB.HashLookup[app.Metadata.OriginalCrc32].TgdbId.First()); } } } var api = Program.TheGamesDBAPI; var infoList = new Dictionary <int, IScraperData>(); foreach (var chunk in idList.Values.Distinct().ToList().ChunkBy(20)) { var apiResponse = api.GetInfoByID(chunk.ToArray()); while (true) { apiResponse.Wait(); foreach (var result in apiResponse.Result.Items) { infoList.Add(int.Parse(result.ID), result); } if (apiResponse.Result.HasNextPage) { apiResponse = apiResponse.Result.GetNextPage(); } else { break; } } } var counter = 0; foreach (var app in NewGames) { tasker.SetProgress(++counter, NewGames.Count); tasker.SetStatus(string.Format(Resources.Scraping0, app.Name)); int tgdbId; if (app.Metadata.OriginalCrc32 != 0 && data.GamesDB.HashLookup.ContainsKey(app.Metadata.OriginalCrc32) && data.GamesDB.HashLookup[app.Metadata.OriginalCrc32].TgdbId.Count > 0 && infoList.ContainsKey(tgdbId = data.GamesDB.HashLookup[app.Metadata.OriginalCrc32].TgdbId.First())) { try { var apiResult = infoList[tgdbId]; if (apiResult.Name != null) { var name = GamesDB.HashLookup[app.Metadata.OriginalCrc32].Name; if (name != null) { name = Shared.CleanName(name, true); } app.Desktop.Name = name ?? apiResult.Name; app.Desktop.SortName = Shared.GetSortName(app.Desktop.Name); } if (apiResult.Publishers != null && apiResult.Publishers.Length > 0) { app.Desktop.Publisher = String.Join(", ", apiResult.Publishers).ToUpper(); } else if (apiResult.Developers != null && apiResult.Developers.Length > 0) { if (apiResult.ReleaseDate != null) { app.Desktop.Copyright = $"© {apiResult.ReleaseDate.Year} {String.Join(", ", apiResult.Developers)}"; } else { app.Desktop.Copyright = $"© {String.Join(", ", apiResult.Developers)}"; } } if (apiResult.Description != null) { app.Desktop.Description = apiResult.Description; } if (apiResult.ReleaseDate != null) { app.Desktop.ReleaseDate = apiResult.ReleaseDate.ToString("yyyy-MM-dd"); } if (apiResult.PlayerCount > 0) { app.Desktop.Players = Convert.ToByte(apiResult.PlayerCount); app.Desktop.Simultaneous = apiResult.PlayerCount == 2; } if (apiResult.Genres != null && apiResult.Genres.Length > 0) { foreach (var genre in apiResult.Genres) { var match = Genre.GenreList.Where(g => g.GamesDbId.Contains(genre.ID)).Select(g => g); if (match.Count() > 0) { var firstGenre = match.First(); app.Desktop.Genre = firstGenre.DesktopName; break; } } } using (var wc = new HakchiWebClient()) { try { var front = apiResult.Images.Where(i => i.Type == TeamShinkansen.Scrapers.Enums.ArtType.Front).ToArray(); if (front.Length > 0 && !app.CoverArtMatchSuccess) { tasker.SetStatus(string.Format(Resources.DownloadingFrontArtFor0, apiResult.Name)); var data = wc.DownloadData(front[0].Url); using (var ms = new MemoryStream(data)) using (var bm = new Bitmap(ms)) { app.SetImage(bm); } } } catch (WebException ex) { } try { tasker.SetStatus(string.Format(Resources.DownloadingClearLogoFor0, apiResult.Name)); var imageData = wc.DownloadData($"https://cdn.thegamesdb.net/images/original/clearlogo/{apiResult.ID}.png"); using (var ms = new MemoryStream(imageData)) using (var clearLogo = File.OpenWrite(Path.Combine(app.BasePath, $"{app.Code}_logo.png"))) { ms.Seek(0, SeekOrigin.Begin); ms.CopyTo(clearLogo); ms.Seek(0, SeekOrigin.Begin); tasker.SetStatus(string.Format(Resources.GeneratingSpineFor0, apiResult.Name)); using (var bm = new Bitmap(ms)) using (var cl = new SystemDrawingBitmap(bm)) using (var spineImage = (Program.SpineTemplates.Where(e => e.Value.Name == "Custom (Black Grid)").First().Value as SpineTemplate <Bitmap>).Process(cl).Bitmap) { app.SetMdMini(spineImage, NesMenuElementBase.GameImageType.MdSpine); } } } catch (WebException ex) { } } } catch (Exception innerEx) { } } } } catch (Exception ex) { } return(Tasker.Conclusion.Success); }