private void SelectImage(ICharaCard card) { if (imagesCache.ContainsKey(card)) { pictureBox.Image = imagesCache[card]; } else { Image image; if (card.PngData != null && card.PngData.Length > 0) { image = Image.FromStream(new MemoryStream(card.PngData)); } else { string imageFile = card.SourceFileName; if (changeMap.ContainsKey(card)) { imageFile = changeMap[card]; } image = GenerateImage(imageFile, card.Sex, drawCardBkg, drawCardFrame, drawSceneImage); } if (imagesCache.ContainsKey(card)) { imagesCache[card] = image; } else { imagesCache.Add(card, image); } pictureBox.Image = image; } }
public bool TryParse(FileInfo file) { string fileName = file.FullName; using (BinaryReader reader = new BinaryReader(file.OpenRead())) { long pngSize = 0L; if (!CheckPngData(reader.BaseStream, ref pngSize, true)) { return(false); } if (reader.BaseStream.Length - reader.BaseStream.Position == 0L) { return(false); } try { int loadProductNo = reader.ReadInt32(); if (loadProductNo != 100) { CardTypes sceneCardType = CheckIfSceneCard(reader); if (sceneCardType != CardTypes.Unknown) // Scene Card { return(ReadSceneCard(fileName, sceneCardType, reader, pngSize)); } reader.Seek(pngSize, SeekOrigin.Begin); } ICharaCard card = null; string marker = reader.ReadString(); CardTypes cardType = CardTypeFinder.IsMarkerOf(marker); switch (cardType) { case CardTypes.KoiKatuChara: case CardTypes.KoiKatuCharaS: case CardTypes.KoiKatuCharaSP: card = new KKCharaCard(fileName, loadProductNo, marker); break; case CardTypes.AIS_Chara: card = new AISCharaCard(fileName, loadProductNo, marker); break; case CardTypes.HoneySelectCharaMale: card = new HSCharaCard(fileName, marker, 0); break; case CardTypes.HoneySelectCharaFemale: card = new HSCharaCard(fileName, marker, 1); break; case CardTypes.PlayHome_Male: card = new PHCharaCard(fileName, marker, 0); break; case CardTypes.PlayHome_Female: card = new PHCharaCard(fileName, marker, 1); break; case CardTypes.PremiumResortCharaMale: card = new SBPRCharaCard(fileName, marker, 0); break; case CardTypes.PremiumResortCharaFemale: card = new SBPRCharaCard(fileName, marker, 1); break; default: break; } if (card != null && card.Parse(reader, pngSize)) { Cards.Add(card); return(true); } } catch (Exception e) { System.Diagnostics.Debug.WriteLine(e.Message); } } return(false); }
private bool ReadSceneCard(string fileName, CardTypes cardType, BinaryReader reader, long pngEnd) { var finderArr = new CardTypeFinder[] { new CardTypeFinder(CardTypes.KoiKatuChara), new CardTypeFinder(CardTypes.KoiKatuCharaS), new CardTypeFinder(CardTypes.KoiKatuCharaSP), new CardTypeFinder(CardTypes.AIS_Chara), new CardTypeFinder(CardTypes.HoneySelectCharaMale), new CardTypeFinder(CardTypes.HoneySelectCharaFemale) }; if (cardType == CardTypes.PHStudio) { PHSceneCard pHScene = new PHSceneCard(fileName); pHScene.Parse(reader, pngEnd); if (pHScene.CharaCards.Count > 0) { this.Cards.AddRange(pHScene.CharaCards); } return(true); } foreach (var finder in finderArr) { reader.Seek(pngEnd, SeekOrigin.Begin); if (finder.Find(reader, false)) { try { do { long charaPos = finder.Position; reader.Seek(charaPos + finder.MarkerPattern.Length, SeekOrigin.Begin); ICharaCard card = null; switch (finder.CardType) { case CardTypes.KoiKatuChara: case CardTypes.KoiKatuCharaS: case CardTypes.KoiKatuCharaSP: card = new KKCharaCard(fileName, 100, finder.Marker); break; case CardTypes.AIS_Chara: card = new AISCharaCard(fileName, 100, finder.Marker); break; case CardTypes.HoneySelectCharaMale: card = new HSCharaCard(fileName, finder.Marker, 0); break; case CardTypes.HoneySelectCharaFemale: card = new HSCharaCard(fileName, finder.Marker, 1); break; default: break; } if (card != null && card.Parse(reader, 0)) { Cards.Add(card); } reader.Seek(charaPos + finder.MarkerPattern.Length + 1, SeekOrigin.Begin); } while (finder.Find(reader, false)); } catch (Exception e) { System.Diagnostics.Debug.WriteLine(e.Message); } } } return(true); }