private void CopyTileResLevel(JP2Codestream dst, JP2Codestream src, ushort tIdx, int r) { int decomps = src.DecompositionLevels; var dstTilePart = dst.CreateTilePart(tIdx, r == decomps); // get all packets for this resolution level and source tile // currently support only a single tile in source image for every // destination tile. QueryContext queryContext = new QueryContext(src, 0); PreciseQuery preciseQuery = PreciseQuery.Create(queryContext); var intervals = preciseQuery .Resolution(r) .Execute(); JP2Tile srcTile = src.Tiles[0]; // add packet lengths Func <JP2TilePart, int, int, int, int> addPacketLengths = (tpSrc, pckStart, pckCount, voidParam) => { var lengths = tpSrc.GetPacketLengths(pckStart, pckCount); dstTilePart.AddPacketLengths(lengths); return(voidParam); }; EnumerateIntervals <int>(intervals, srcTile, addPacketLengths); // bulk transfer packet data dstTilePart.Flush(); byte[] buffer = new byte[1 << 16]; Func <JP2TilePart, int, int, uint, uint> bulkTransfer = (tpSrc, pckStart, pckCount, dstOffset) => { uint dataCount = JP2TilePart.BulkTransferData( dstTilePart, dstOffset, tpSrc, pckStart, pckCount, buffer); return(dstOffset + dataCount); }; EnumerateIntervals <uint>( intervals, srcTile, bulkTransfer); dstTilePart.Close(); srcTile.Close(); }
private void CopyImage() { var cs = _jp2.OpenCodestream(); int tileparts = cs.OpenChildren().Count(); var markers = cs.Markers.Values .Where(ms => ms.Type != MarkerType.TLM); var csout = new JP2Codestream(markers, tileparts); csout.Bind(_mem, 0); JP2TilePart tpin = cs.OpenTilePart(0, 0); JP2TilePart tpout = csout.CreateTilePart(0, true); tpout.AddPacketLengths( tpin.GetPacketLengths(0, tpin.Packets)); tpout.Flush(); uint dataCount = JP2TilePart.BulkTransferData(tpout, 0, tpin, 0, tpin.Packets); csout.Flush(); }
public void Initialize() { _fs = File.OpenRead("test.jp2"); _mem = new MemoryStream(); _csin = Jp2File.Open(_fs).OpenCodestream(); var siz = _csin.Markers[MarkerType.SIZ] as SizMarker; var cod = _csin.Markers[MarkerType.COD] as CodMarker; var qcd = _csin.Markers[MarkerType.QCD] as QcdMarker; var tpin = _csin.OpenTilePart(0, 0); var csout = new JP2Codestream(new List <MarkerSegment>() { siz, cod, qcd }, 1); csout.Bind(_mem, 0); var tpout = csout.CreateTilePart(0, true); var lengths = tpin.GetPacketLengths(0, tpin.Packets); tpout.AddPacketLengths(lengths); tpout.Flush(); csout.Flush(); _mem.Seek(0, SeekOrigin.Begin); }