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;
            }
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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);
        }