public static CbmFile FromFile(string fileName) { var cbm = new CbmFile(); cbm.FileName = fileName; FileStream filestream = null; try { filestream = new FileStream(fileName, FileMode.Open, FileAccess.Read); using (BinaryReader file = new BinaryReader(filestream, Encoding.ASCII)) { filestream = null; int count = file.ReadInt32(); cbm.currentImageIndex = file.ReadInt32(); file.BaseStream.Position += 16; cbm.ImageId = file.ReadInt32(); cbm.GroupId = file.ReadInt32(); file.BaseStream.Position += 4; if (cbm.currentImageIndex < 0 || cbm.currentImageIndex >= count) { cbm.currentImageIndex = 0; } for (int i = 0; i < count; i++) { var image = new CbmImage(); image.Width = file.ReadInt32(); image.Height = file.ReadInt32(); image.IsCompressed = file.ReadInt32() != 0; int dataLength = file.ReadInt32(); image.AreaLeft = file.ReadInt32(); image.AreaTop = file.ReadInt32(); image.AreaRight = file.ReadInt32(); image.AreaBottom = file.ReadInt32(); file.BaseStream.Position += 4; image.palette16 = new ushort[256]; for (int c = 0; c < 256; c++) { image.palette16[c] = (ushort)file.ReadUInt32(); } image.palette32 = new uint[256]; for (int c = 0; c < 256; c++) { image.palette32[c] = file.ReadUInt32(); } image.rawData = file.ReadBytes(dataLength); cbm.Images.Add(image); } } } finally { if (filestream != null) { filestream.Dispose(); } } return(cbm); }
private void DeleteImage_Click(object sender, RoutedEventArgs e) { var cbm = this.CbmFile; if (cbm == null) { return; } int index = this.ImagesList.SelectedIndex; if (index == -1) { return; } this.RunBusyAction(disp => { cbm.Images.RemoveAt(index); disp(() => this.ImagesList.SelectedIndex = -1); disp(() => this.CbmFile = this.CbmFile); }); }
public static CbmFile FromFile(string fileName) { var cbm = new CbmFile(); cbm.FileName = fileName; FileStream filestream = null; try { filestream = new FileStream(fileName, FileMode.Open, FileAccess.Read); using (BinaryReader file = new BinaryReader(filestream, Encoding.ASCII)) { filestream = null; int count = file.ReadInt32(); cbm.currentImageIndex = file.ReadInt32(); file.BaseStream.Position += 16; cbm.ImageId = file.ReadInt32(); cbm.GroupId = file.ReadInt32(); file.BaseStream.Position += 4; if (cbm.currentImageIndex < 0 || cbm.currentImageIndex >= count) { cbm.currentImageIndex = 0; } for (int i = 0; i < count; i++) { var image = new CbmImage(); image.Width = file.ReadInt32(); image.Height = file.ReadInt32(); image.IsCompressed = file.ReadInt32() != 0; int dataLength = file.ReadInt32(); image.AreaLeft = file.ReadInt32(); image.AreaTop = file.ReadInt32(); image.AreaRight = file.ReadInt32(); image.AreaBottom = file.ReadInt32(); file.BaseStream.Position += 4; image.palette16 = new ushort[256]; for (int c = 0; c < 256; c++) { image.palette16[c] = (ushort)file.ReadUInt32(); } image.palette32 = new uint[256]; for (int c = 0; c < 256; c++) { image.palette32[c] = file.ReadUInt32(); } image.rawData = file.ReadBytes(dataLength); cbm.Images.Add(image); } } } finally { if (filestream != null) { filestream.Dispose(); } } return cbm; }
private void SetImageColorKey_Click(object sender, RoutedEventArgs e) { var image = this.ImagesList.SelectedItem as CbmImage; if (image == null) { return; } Color colorKey = this.DatImageColorKey.SelectedColor; this.RunBusyAction(disp => { image.MakeColorTransparent(colorKey.R, colorKey.G, colorKey.B); disp(() => this.CbmFile = this.CbmFile); }); }
private void AddImage_Click(object sender, RoutedEventArgs e) { var cbm = this.CbmFile; if (cbm == null) { return; } var dialog = new OpenFileDialog(); dialog.CheckFileExists = true; dialog.DefaultExt = ".png"; dialog.Filter = "Images (*.png, *.bmp, *.jpg)|*.png;*.bmp;*.jpg|PNG files (*.png)|*.png|BMP files (*.bmp)|*.bmp|JPG files (*.jpg)|*.jpg"; string fileName; if (dialog.ShowDialog(this) == true) { fileName = dialog.FileName; } else { return; } this.RunBusyAction(disp => { try { var image = CbmImage.FromFile(fileName); cbm.Images.Add(image); disp(() => this.CbmFile = this.CbmFile); disp(() => this.ImagesList.SelectedIndex = this.ImagesList.Items.Count - 1); } catch (Exception ex) { disp(() => MessageBox.Show(this, ex.Message, this.Title, MessageBoxButton.OK, MessageBoxImage.Error)); } }); }
private void NewImage_Click(object sender, RoutedEventArgs e) { var cbm = this.CbmFile; if (cbm == null) { return; } this.RunBusyAction(disp => { var image = new CbmImage(); cbm.Images.Add(image); disp(() => this.CbmFile = this.CbmFile); disp(() => this.ImagesList.SelectedIndex = this.ImagesList.Items.Count - 1); }); }
private void ExecuteSaveAs(object sender, ExecutedRoutedEventArgs e) { var cbm = this.CbmFile; if (cbm == null) { return; } var dialog = new SaveFileDialog(); dialog.AddExtension = true; dialog.DefaultExt = ".cbm"; dialog.Filter = "CBM files (*.cbm)|*.cbm"; dialog.FileName = System.IO.Path.GetFileName(cbm.FileName); string fileName; if (dialog.ShowDialog(this) == true) { fileName = dialog.FileName; } else { return; } this.RunBusyAction(disp => { try { cbm.Save(fileName); disp(() => this.CbmFile = cbm); } catch (Exception ex) { disp(() => MessageBox.Show(this, ex.Message, this.Title, MessageBoxButton.OK, MessageBoxImage.Error)); } }); }
private void ExecuteSave(object sender, ExecutedRoutedEventArgs e) { var cbm = this.CbmFile; if (cbm == null) { return; } if (string.IsNullOrEmpty(cbm.FileName)) { this.ExecuteSaveAs(null, null); return; } this.RunBusyAction(disp => { try { cbm.Save(cbm.FileName); disp(() => this.CbmFile = cbm); } catch (Exception ex) { disp(() => MessageBox.Show(this, ex.Message, this.Title, MessageBoxButton.OK, MessageBoxImage.Error)); } }); }
private void ExecuteOpen(object sender, ExecutedRoutedEventArgs e) { var dialog = new OpenFileDialog(); dialog.DefaultExt = ".cbm"; dialog.CheckFileExists = true; dialog.Filter = "CBM files (*.cbm)|*.cbm"; string fileName; if (dialog.ShowDialog(this) == true) { fileName = dialog.FileName; } else { return; } this.RunBusyAction(disp => { try { var cbm = CbmFile.FromFile(fileName); disp(() => this.CbmFile = cbm); } catch (Exception ex) { disp(() => MessageBox.Show(this, fileName + "\n" + ex.Message, this.Title, MessageBoxButton.OK, MessageBoxImage.Error)); } }); }
private void ExecuteNew(object sender, ExecutedRoutedEventArgs e) { this.RunBusyAction(disp => { var cbm = new CbmFile(); disp(() => this.CbmFile = cbm); }); }