public const TiffTag TIFFTAG_BITS_METADATA = (TiffTag)811; //Bits per pixel /// <summary> /// Сохраняет VimbaAPI Frame в *.Tiff файл /// </summary> /// <param name="frame">Vimba's Frame</param> /// <param name="filename">Имя файла</param> /// <param name="tiffWorker"></param> public static void SaveFrameToTiff(Frame frame, string filename, TiffWorker tiffWorker) { Tiff.SetTagExtender(TagExtender); //parentExtender = Tiff.SetTagExtender(TagExtender); using (var tiff = Tiff.Open(filename, "w")) { tiff.SetField(TiffTag.IMAGEWIDTH, frame.Width); tiff.SetField(TiffTag.IMAGELENGTH, frame.Height); tiff.SetField(TiffTag.SAMPLESPERPIXEL, 1); tiff.SetField(TiffTag.BITSPERSAMPLE, 16); tiff.SetField(TiffTag.ROWSPERSTRIP, frame.Height); tiff.SetField(TiffTag.FILLORDER, FillOrder.MSB2LSB); tiff.SetField(TiffTag.PHOTOMETRIC, Photometric.MINISBLACK); //Set custom tags: tiff.SetField(TIFFTAG_WAVELENGTH_METADATA, tiffWorker.Wavelength); tiff.SetField(TIFFTAG_EXPOSURE_METADATA, tiffWorker.Exposure); tiff.SetField(TIFFTAG_GAIN_METADATA, tiffWorker.Gain); tiff.SetField(TIFFTAG_GAMMA_METADATA, tiffWorker.Gamma); tiff.SetField(TIFFTAG_TIMESTAMP_METADATA, tiffWorker.Timestamp); tiff.SetField(TIFFTAG_GPS_METADATA, tiffWorker.GPS); tiff.SetField(TIFFTAG_OffsetX_METADATA, tiffWorker.OffsetX); tiff.SetField(TIFFTAG_OffsetY_METADATA, tiffWorker.OffsetY); tiff.SetField(TIFFTAG_BinningX_METADATA, tiffWorker.BinningX); tiff.SetField(TIFFTAG_BinningY_METADATA, tiffWorker.BinningY); tiff.SetField(TIFFTAG_WAVENUMBER_METADATA, tiffWorker.Wavenumber); tiff.SetField(TIFFTAG_BITS_METADATA, tiffWorker.Bits); int rawLength = (int)frame.Width * 2; //длина ряда 16-битных пикселей в байтах byte[] buffer = new byte[rawLength]; for (int j = 0; j < frame.Height; j++) { int srcOffset = rawLength * j; //offset in source buffer в байтах Buffer.BlockCopy(frame.Buffer, srcOffset, buffer, 0, buffer.Length); //заполняем буффер ряда tiff.WriteScanline(buffer, j); //записываем ряд j в файл } tiff.Close(); tiff.Dispose(); } //Tiff.SetTagExtender(parentExtender); }
/// <summary> /// Сохраняет VimbaAPI Frame в *.Tiff файл /// </summary> /// <param name="frame">Vimba's Frame</param> /// <param name="filename">Имя файла</param> /// <param name="tiffWorker"></param> public static void SavePolarisationFrameToTiff(Frame frame, string filename, TiffWorker tiffWorker) { Tiff.SetTagExtender(TagExtender); //parentExtender = Tiff.SetTagExtender(TagExtender); using (var tiff = Tiff.Open(filename, "w")) { tiff.SetField(TiffTag.IMAGEWIDTH, frame.Width); tiff.SetField(TiffTag.IMAGELENGTH, frame.Height); tiff.SetField(TiffTag.SAMPLESPERPIXEL, 1); tiff.SetField(TiffTag.BITSPERSAMPLE, 16); tiff.SetField(TiffTag.ROWSPERSTRIP, frame.Height); tiff.SetField(TiffTag.FILLORDER, FillOrder.MSB2LSB); tiff.SetField(TiffTag.PHOTOMETRIC, Photometric.MINISBLACK); //Set custom tags: tiff.SetField(TIFFTAG_WAVELENGTH_METADATA, tiffWorker.Wavelength); tiff.SetField(TIFFTAG_EXPOSURE_METADATA, tiffWorker.Exposure); tiff.SetField(TIFFTAG_GAIN_METADATA, tiffWorker.Gain); tiff.SetField(TIFFTAG_GAMMA_METADATA, tiffWorker.Gamma); tiff.SetField(TIFFTAG_TIMESTAMP_METADATA, tiffWorker.Timestamp); tiff.SetField(TIFFTAG_GPS_METADATA, tiffWorker.GPS); tiff.SetField(TIFFTAG_OffsetX_METADATA, tiffWorker.OffsetX); tiff.SetField(TIFFTAG_OffsetY_METADATA, tiffWorker.OffsetY); tiff.SetField(TIFFTAG_BinningX_METADATA, tiffWorker.BinningX); tiff.SetField(TIFFTAG_BinningY_METADATA, tiffWorker.BinningY); tiff.SetField(TIFFTAG_WAVENUMBER_METADATA, tiffWorker.Wavenumber); tiff.SetField(TIFFTAG_BITS_METADATA, tiffWorker.Bits); //Main Page tiff.SetField(TiffTag.SUBFILETYPE, FileType.PAGE); tiff.SetField(TiffTag.PAGENAME, "Full"); tiff.SetField(TiffTag.PAGENUMBER, 0, 5); int rawLength = (int)frame.Width * 2; //длина ряда 16-битных пикселей в байтах byte[] buffer = new byte[rawLength]; int srcOffset = 0; for (int j = 0; j < frame.Height; j++) { srcOffset = rawLength * j; //offset in source buffer в байтах Buffer.BlockCopy(frame.Buffer, srcOffset, buffer, 0, buffer.Length); //заполняем буффер ряда tiff.WriteScanline(buffer, j); //записываем ряд j в файл } tiff.WriteDirectory(); //Write Polarisation Components pages int w = (int)frame.Width / 2; int h = (int)frame.Height / 2; rawLength = (int)frame.Width; buffer = new byte[rawLength]; PolarData[] polars = new PolarData[] { PolarData.I0, PolarData.I135, PolarData.I45, PolarData.I90 }; byte[] I = null; for (int k = 0; k < polars.Length; k++) { tiff.SetField(TiffTag.IMAGEWIDTH, w); tiff.SetField(TiffTag.IMAGELENGTH, h); tiff.SetField(TiffTag.SAMPLESPERPIXEL, 1); tiff.SetField(TiffTag.BITSPERSAMPLE, 16); tiff.SetField(TiffTag.ROWSPERSTRIP, h); tiff.SetField(TiffTag.FILLORDER, FillOrder.MSB2LSB); tiff.SetField(TiffTag.PHOTOMETRIC, Photometric.MINISBLACK); tiff.SetField(TiffTag.SUBFILETYPE, FileType.PAGE); tiff.SetField(TiffTag.PAGENAME, polars[k].ToString()); tiff.SetField(TiffTag.PAGENUMBER, k + 1, 5); I = ExtractPolarisation(frame, polars[k], tiffWorker.Bits); for (int j = 0; j < h; j++) { srcOffset = rawLength * j; Buffer.BlockCopy(I, srcOffset, buffer, 0, buffer.Length); tiff.WriteScanline(buffer, j); } tiff.WriteDirectory(); } tiff.Close(); tiff.Dispose(); } //Tiff.SetTagExtender(parentExtender); }