private void _btnOk_Click(object sender, System.EventArgs e) { BitsPerPixel = (int)_cbBitsPerPixel.SelectedItem; Order = (RasterByteOrder)Constants.GetValueFromName( typeof(RasterByteOrder), (string)_cbOrder.SelectedItem, _initialOrder); PaletteFlags = ColorResolutionCommandPaletteFlags.None; MyPaletteType myPalette = (MyPaletteType)_cbPalette.SelectedItem; switch (myPalette) { case MyPaletteType.Fixed: PaletteFlags |= ColorResolutionCommandPaletteFlags.Fixed; break; case MyPaletteType.Optimized: PaletteFlags |= ColorResolutionCommandPaletteFlags.Optimized; break; case MyPaletteType.Identity: PaletteFlags |= ColorResolutionCommandPaletteFlags.Identity; break; case MyPaletteType.Netscape: PaletteFlags |= ColorResolutionCommandPaletteFlags.Netscape; break; } DitheringMethod = (RasterDitheringMethod)Constants.GetValueFromName( typeof(RasterDitheringMethod), (string)_cbDither.SelectedItem, _initialDitheringMethod); _initialBitsPerPixel = BitsPerPixel; _initialOrder = Order; _initialPaletteFlags = PaletteFlags; _initialDitheringMethod = DitheringMethod; }
/// <summary> /// Called when compressed data is available /// </summary> bool MyCodecsCompressDataCallback(int width, int height, int bitsPerPixel, RasterByteOrder order, RasterViewPerspective viewPerspective, RasterNativeBuffer buffer) { // Write compressed data to the file byte[] dataBuffer = new byte[(int)buffer.Length]; Marshal.Copy(buffer.Data, dataBuffer, 0, (int)buffer.Length); outputFile.Write(dataBuffer, 0, (int)buffer.Length); return(true); }
private void ColorResolutionDialog_Load(object sender, System.EventArgs e) { if (_beforeViewer != null) { _tsbtnFit.Checked = false; _tsbtnNormal.Checked = true; _afterViewer.FitView = false; _beforeViewer.FitView = false; } if (BitsPerPixel == -1) { BitsPerPixel = _initialBitsPerPixel; } Order = _initialOrder; PaletteFlags = _initialPaletteFlags; DitheringMethod = _initialDitheringMethod; int[] bitsPerPixel = { 1, 2, 3, 4, 5, 6, 7, 8, 12, 16, 24, 32, 48, 64 }; foreach (int i in bitsPerPixel) { _cbBitsPerPixel.Items.Add(i); if (BitsPerPixel == i) { _cbBitsPerPixel.SelectedItem = i; } } Array a = Enum.GetValues(typeof(MyPaletteType)); foreach (MyPaletteType i in a) { _cbPalette.Items.Add(i); if ((int)PaletteFlags == (int)i) { _cbPalette.SelectedItem = i; } } if (_cbPalette.SelectedItem == null) { _cbPalette.SelectedIndex = 0; } Tools.FillComboBoxWithEnum(_cbDither, typeof(RasterDitheringMethod), DitheringMethod); GetUpdateValues(); UpdateMyControls(); }
private void GetUpdateValues() { _tempBitsPerPixel = -1; if (_cbBitsPerPixel.SelectedItem != null) { _tempBitsPerPixel = (int)_cbBitsPerPixel.SelectedItem; } _tempOrder = RasterByteOrder.Bgr; if (_cbOrder.SelectedItem != null) { _tempOrder = (RasterByteOrder)Constants.GetValueFromName( typeof(RasterByteOrder), (string)_cbOrder.SelectedItem, _initialOrder); } _tempPaletteFlags = ColorResolutionCommandPaletteFlags.None; if (_cbPalette.SelectedItem != null) { MyPaletteType myPalette = (MyPaletteType)_cbPalette.SelectedItem; switch (myPalette) { case MyPaletteType.Fixed: _tempPaletteFlags |= ColorResolutionCommandPaletteFlags.Fixed; break; case MyPaletteType.Optimized: _tempPaletteFlags |= ColorResolutionCommandPaletteFlags.Optimized; break; case MyPaletteType.Netscape: _tempPaletteFlags |= ColorResolutionCommandPaletteFlags.Netscape; break; } } _tempDitheringMethod = RasterDitheringMethod.None; if (_cbDither.SelectedItem != null) { _tempDitheringMethod = (RasterDitheringMethod)Constants.GetValueFromName( typeof(RasterDitheringMethod), (string)_cbDither.SelectedItem, _initialDitheringMethod); } }
/// <summary> /// Load a new image /// </summary> private void _miFileOpen_Click(object sender, System.EventArgs e) { RasterCodecs _codecs = null; CodecsImageInfo imageInfo = null; try { // initialize the codecs object. _codecs = new RasterCodecs(); // Since we are dealing with large images, we do not want to allocate the entire image. We are only going to load it row by row _codecs.Options.Load.AllocateImage = false; _codecs.Options.Load.StoreDataInImage = false; _codecs.LoadImage += new EventHandler <CodecsLoadImageEventArgs>(codecs_LoadImage); // load the image OpenFileDialog openFileDialog = new OpenFileDialog(); openFileDialog.Title = "Open File"; openFileDialog.Multiselect = false; if (openFileDialog.ShowDialog() == DialogResult.OK) { //Check if image is valid for this demo imageInfo = _codecs.GetInformation(openFileDialog.FileName, false); if (!IsImageValid(imageInfo)) { Messager.ShowError(this, "The input image has to be 8-bit Gray scale, 12-bit Gray scale, 16-bit Gray scale, RGB (color), and TopLeft view perspective." + " This DEMO is not meant to be used with small or palletized images (like GIF, PNG, or 1-bit images)." + " Use this DEMO to save large dimension images efficiently using JPEG2000 compression."); return; } using (RasterSaveDialog saveDialog = new RasterSaveDialog(_codecs)) { saveDialog.AutoProcess = false; saveDialog.Title = "Save As"; saveDialog.ShowFileOptionsBasicJ2kOptions = true; saveDialog.ShowFileOptionsJ2kOptions = true; saveDialog.ShowOptions = true; saveDialog.ShowQualityFactor = true; saveDialog.ShowFileOptionsProgressive = true; saveDialog.ShowFileOptionsStamp = true; saveDialog.QualityFactor = 20; SetupFormats(saveDialog); if (saveDialog.ShowDialog(this) != DialogResult.OK) { return; } _lblFilenameValue.Text = Path.GetFileName(openFileDialog.FileName); _lblDimensionValue.Text = String.Format("{0} x {1}", imageInfo.Width, imageInfo.Height); _lblImageBitsPerPixelValue.Text = imageInfo.BitsPerPixel.ToString(); //Get the selected compression type CodecsCompression selectedCompression; if (saveDialog.Format == RasterImageFormat.J2k) { selectedCompression = CodecsCompression.J2k; } else { selectedCompression = CodecsCompression.Jp2; } RasterByteOrder rasterByteOrder = ((saveDialog.BitsPerPixel == 12) || (saveDialog.BitsPerPixel == 16)) ? RasterByteOrder.Gray : RasterByteOrder.Bgr; CodecsLoadByteOrder codecsLoadByteOrder = ((saveDialog.BitsPerPixel == 12) || (saveDialog.BitsPerPixel == 16)) ? CodecsLoadByteOrder.Gray : CodecsLoadByteOrder.Bgr; bytesPerLine = CalculateBytesPerLine(saveDialog.BitsPerPixel, imageInfo.Width); _codecs.Options.Jpeg.Save.QualityFactor = saveDialog.QualityFactor; _codecs.Options.Jpeg.Save.Passes = saveDialog.Passes; _codecs.Options.Jpeg.Save.SaveWithStamp = saveDialog.WithStamp; _codecs.Options.Jpeg.Save.StampWidth = saveDialog.StampWidth; _codecs.Options.Jpeg.Save.StampHeight = saveDialog.StampHeight; _codecs.Options.Jpeg.Save.StampBitsPerPixel = saveDialog.StampBitsPerPixel; _codecs.Options.Jpeg2000.Save.CompressionControl = saveDialog.FileJ2kOptions.CompressionControl; _codecs.Options.Jpeg2000.Save.CompressionRatio = saveDialog.FileJ2kOptions.CompressionRatio; _codecs.Options.Jpeg2000.Save.DecompositionLevels = saveDialog.FileJ2kOptions.DecompositionLevels; _codecs.Options.Jpeg2000.Save.DerivedQuantization = saveDialog.FileJ2kOptions.DerivedQuantization; _codecs.Options.Jpeg2000.Save.ImageAreaHorizontalOffset = saveDialog.FileJ2kOptions.ImageAreaHorizontalOffset; _codecs.Options.Jpeg2000.Save.ImageAreaVerticalOffset = saveDialog.FileJ2kOptions.ImageAreaVerticalOffset; _codecs.Options.Jpeg2000.Save.ProgressingOrder = saveDialog.FileJ2kOptions.ProgressingOrder; _codecs.Options.Jpeg2000.Save.ReferenceTileHeight = saveDialog.FileJ2kOptions.ReferenceTileHeight; _codecs.Options.Jpeg2000.Save.ReferenceTileWidth = saveDialog.FileJ2kOptions.ReferenceTileWidth; _codecs.Options.Jpeg2000.Save.RegionOfInterest = saveDialog.FileJ2kOptions.RegionOfInterest; _codecs.Options.Jpeg2000.Save.RegionOfInterestRectangle = saveDialog.FileJ2kOptions.RegionOfInterestRectangle; _codecs.Options.Jpeg2000.Save.RegionOfInterestWeight = saveDialog.FileJ2kOptions.RegionOfInterestWeight; _codecs.Options.Jpeg2000.Save.TargetFileSize = saveDialog.FileJ2kOptions.TargetFileSize; _codecs.Options.Jpeg2000.Save.TileHorizontalOffset = saveDialog.FileJ2kOptions.TileHorizontalOffset; _codecs.Options.Jpeg2000.Save.TileVerticalOffset = saveDialog.FileJ2kOptions.TileVerticalOffset; _codecs.Options.Jpeg2000.Save.UseColorTransform = saveDialog.FileJ2kOptions.UseColorTransform; _codecs.Options.Jpeg2000.Save.UseEphMarker = saveDialog.FileJ2kOptions.UseEphMarker; _codecs.Options.Jpeg2000.Save.UseRegionOfInterest = saveDialog.FileJ2kOptions.UseRegionOfInterest; _codecs.Options.Jpeg2000.Save.UseSopMarker = saveDialog.FileJ2kOptions.UseSopMarker; bCancel = false; bCompressing = true; UpdateMyControls(); //Start Compressing using (outputFile = File.Create(saveDialog.FileName)) { _codecs.StartCompress(imageInfo.Width, imageInfo.Height, saveDialog.BitsPerPixel, rasterByteOrder, RasterViewPerspective.TopLeft, bytesPerLine, IntPtr.Zero, 0, selectedCompression, MyCodecsCompressDataCallback); _codecs.Load(openFileDialog.FileName, saveDialog.BitsPerPixel, codecsLoadByteOrder, 1, 1); _codecs.StopCompress(); _lblStatusValue.Text = bCancel ? "Aborted" : "Complete"; } } } } catch (Exception ex) { Messager.ShowError(this, ex); _lblStatusValue.Text = "Error"; } finally { if (_codecs != null) { _codecs.Dispose(); } if (imageInfo != null) { imageInfo.Dispose(); } bCompressing = false; UpdateMyControls(); } }