public void ShowImage(Bitmap imageTexture) { ShandalarAsset image = loadedImages[loadedImageIndex]; imagePanel.BackgroundImage = imageTexture; switch (image.imageType) { case ImageType.Pic: label2.Text = "Width: " + imageTexture.Width + "\nHeight: " + imageTexture.Height + "\nHas Embedded Palette:" + image.hasEmbeddedPalette; break; default: label2.Text = "Width: " + imageTexture.Width + "\n" + "Height: " + imageTexture.Height; break; } if (imageTexture.Width > imagePanel.Width || imageTexture.Height > imagePanel.Height) { imagePanel.BackgroundImageLayout = ImageLayout.Zoom; } else { imagePanel.BackgroundImageLayout = ImageLayout.Center; } }
private void LoadCATFileToolStripMenuItem_Click(object sender, EventArgs e) { OpenFileDialog openFileDialog = new OpenFileDialog(); openFileDialog.DefaultExt = "cat"; openFileDialog.Filter = "Cat Files|*.cat|All Files|*.*"; if (openFileDialog.ShowDialog() == DialogResult.OK) { Cat cat = new Cat(openFileDialog.FileName); assetsListBox.Items.Clear(); loadedImages.Clear(); UpdateStatusBarText("Loading CAT file..."); for (int i = 0; i < cat.files.Count; i++) { string filepath = Path.GetFileNameWithoutExtension(openFileDialog.FileName); ShandalarAsset asset = new ShandalarAsset(filepath, cat.files[i].data, ImageType.Cat); asset.childIndex = i; asset.parentName = filepath; asset.filename = cat.files[i].name; asset.image = CATImageDecoder.DecodeCatImage(asset); assetsListBox.Items.Add(cat.files[i].name); loadedImages.Add(asset); SetProgressBarValue((int)Math.Round(100f * ((float)i / (float)cat.files.Count))); } SetProgressBarValue(0); UpdateStatusBarText("Finished loading CAT file."); } exportToolStripMenuItem.Enabled = true; exportAllToolStripMenuItem.Enabled = true; }
public void OpenWvlFileTest(string path) { byte[] data = File.ReadAllBytes(path); ShandalarAsset asset = new ShandalarAsset(path, data, ImageType.Cat); asset.filename = Path.GetFileName(path); path = path.Replace(".tif", "").Replace(".wvl", ".png"); //replace both extensions seperately, because a few card image files don't have the tif file extension CATImageDecoder.DecodeCatImage(asset).Save(path); }
private void AssetsListBox_SelectedIndexChanged(object sender, EventArgs e) { loadedImageIndex = assetsListBox.SelectedIndex; if (loadedImageIndex != -1) { ShandalarAsset asset = loadedImages[loadedImageIndex]; if (loadedImages[assetsListBox.SelectedIndex].image != null) { ShowImage(asset.image); } string fileText = Encoding.UTF8.GetString(asset.data); string tempText = Regex.Replace(fileText, @"\p{C}+", string.Empty); hexEditor1.LoadData(asset.data); if (tempText != fileText) { textBox1.Text = fileText; } } }
private void LoadSprToolStripMenuItem_Click(object sender, EventArgs e) { OpenFileDialog openFileDialog = new OpenFileDialog(); openFileDialog.DefaultExt = "spr"; openFileDialog.Filter = "Sprite Files|*.spr|All Files|*.*"; if (openFileDialog.ShowDialog() == DialogResult.OK) { exportToolStripMenuItem.Enabled = true; byte[] data = File.ReadAllBytes(openFileDialog.FileName); previewModeComboBox.SelectedIndex = 0; Text = windowTitle + " - " + Path.GetFileName(openFileDialog.FileName); string loadedImageFilename = Path.GetFileNameWithoutExtension(openFileDialog.FileName); Console.WriteLine("Loaded file path: " + openFileDialog.FileName); Color[] palette = useLastEmbeddedPalette && lastEmbeddedPalette != null ? lastEmbeddedPalette : palettes[selectedPaletteIndex]; List <Bitmap> sprites = SprDecoder.GetSprites(data, palette).ToList(); ClearImagePanel(); assetsListBox.Items.Clear(); loadedImages.Clear(); UpdateStatusBarText("Loading images from spr file..."); for (int i = 0; i < sprites.Count; i++) { ShandalarAsset asset = new ShandalarAsset(loadedImageFilename, data, ImageType.Spr); asset.image = sprites[i]; asset.childIndex = i; asset.parentName = loadedImageFilename; asset.filename = Path.GetFileNameWithoutExtension(asset.filePath) + "_" + i; loadedImages.Add(asset); SetProgressBarValue((int)Math.Round(100f * ((float)i / (float)sprites.Count))); } for (int i = 0; i < loadedImages.Count; i++) { assetsListBox.Items.Add(loadedImageFilename + "_" + i); } SetProgressBarValue(0); UpdateStatusBarText("Finished loading images from spr file."); exportToolStripMenuItem.Enabled = true; exportAllToolStripMenuItem.Enabled = true; } }
public ShandalarAsset GetPic(byte [] data, string name) { Color[] originalPalette = palettes[selectedPaletteIndex]; PicDecoder decoder = new PicDecoder(data); if (decoder.hasPalette) { palettes[selectedPaletteIndex] = decoder.embeddedPalette; } /// Output image as picture box Bitmap bitmap = new Bitmap(decoder.width, decoder.height); byte[,] imageData = new byte[decoder.width, decoder.height]; decoder.DecodeImage(imageData); if (decoder.hasPalette) { useLastEmbeddedPaletteCheckbox.Enabled = true; lastEmbeddedPalette = decoder.embeddedPalette; } for (int y = 0; y < decoder.height; y++) { for (int x = 0; x < decoder.width; x++) { byte value = imageData[x, y]; Color color = palettes[selectedPaletteIndex][value]; if (useLastEmbeddedPalette && lastEmbeddedPalette != null) { color = lastEmbeddedPalette[value]; } if (color == Color.Transparent) { if (name.Contains("Cardart") || name.Contains("Duelart") || name.Contains("Exp1art")) { color = Color.Black; //The Cardart pic files have a strange palette difference } else { color = Color.FromArgb(value, value, value); } } bitmap.SetPixel(x, y, color); } } ShandalarAsset asset = new ShandalarAsset(name, data, ImageType.Pic); asset.image = bitmap; asset.filename = Path.GetFileNameWithoutExtension(asset.filePath); Console.WriteLine(asset.filename); if (asset.filePath.Contains("Rogue") || asset.filePath.Contains("Faces") || duelTransparentPicFiles.Contains(asset.filename + ".pic")) //Combine the embedded alpha channel with the main image for the face sprites { Bitmap transparentSprite = new Bitmap(asset.image.Width / 2, asset.image.Height); for (int x = 0; x < asset.image.Width / 2; x++) { for (int y = 0; y < asset.image.Height; y++) { byte paletteIndex = imageData[x + asset.image.Width / 2, y]; Color color = palettes[selectedPaletteIndex][paletteIndex]; if ((paletteIndex == 0)) { transparentSprite.SetPixel(x, y, asset.image.GetPixel(x, y)); } else { transparentSprite.SetPixel(x, y, Color.Transparent); } } } asset.image = transparentSprite; } palettes[selectedPaletteIndex] = originalPalette; asset.hasEmbeddedPalette = decoder.hasPalette; ClearImagePanel(); return(asset); }