Exemplo n.º 1
0
        private bool FragmentProcess()
        {
            int             index, offset;
            List <UuidUrl>  url = new List <UuidUrl>(1);
            List <Fragment> fragments;

            _fragmentJpx = new FragmentJpxStructure();

            //Get Input Jpeg 2000 file name
            _fragmentJpx.inJPG2FileName = _txtInputFile.Text;

            //Get Output Jpeg 2000 file name
            _fragmentJpx.outJPG2FileName = _txtOutputFile.Text;

            //Get Stream file name
            _fragmentJpx.streamFileName = _txtCodeStreamsFiles.Text;

            try
            {
                _fileInformation = (Jpeg2000FileInformation)_mainParentForm.Jpeg2000Eng.GetFileInformation(_fragmentJpx.inJPG2FileName);
            }
            catch (Exception ex)
            {
                Messager.ShowError(this, ex);
                return(false);
            }

            //if(_fileInformation.Format != Jpeg2000FileFormat.LeadJpx || _fileInformation.FragmentTable.Length > 0)
            if (_fileInformation.Format != Jpeg2000FileFormat.LeadJpx || _fileInformation.FragmentTable != null)
            {
                Messager.ShowError(this, "The input file is not in JPX format or already fragmented");
                return(false);
            }

            UuidUrl UuidUrlItem = new UuidUrl();

            UuidUrlItem.Flag    = new byte[3];
            UuidUrlItem.Flag[0] = 0;
            UuidUrlItem.Flag[1] = 0;
            UuidUrlItem.Flag[2] = 0;
            UuidUrlItem.Version = 0;

            System.Text.UnicodeEncoding encoding = new System.Text.UnicodeEncoding();
            byte [] filename = encoding.GetBytes(_fragmentJpx.streamFileName);
            UuidUrlItem.Location = new byte[filename.Length + 2];
            Array.Copy(filename, UuidUrlItem.Location, filename.Length);
            UuidUrlItem.Location[filename.Length]     = 0; //null termination
            UuidUrlItem.Location[filename.Length + 1] = 0; //null termination
            url.Add(UuidUrlItem);

            fragments = new List <Fragment>();

            for (index = 0, offset = 0; index < _fileInformation.CodeStream.Length; index++)
            {
                Fragment fragmenItem = new Fragment();
                fragmenItem.UrlIndex        = 1;
                fragmenItem.CodeStreamIndex = Convert.ToInt32(index);
                fragmenItem.Offset          = offset;
                offset += Convert.ToInt32(_fileInformation.CodeStream[index].DataSize);
                fragments.Add(fragmenItem);
            }

            try
            {
                _mainParentForm.Jpeg2000Eng.FragmentJpxFile(_fragmentJpx.inJPG2FileName, _fragmentJpx.outJPG2FileName, url, fragments);
            }
            catch (Exception ex)
            {
                Messager.ShowError(this, ex);
                return(false);
            }

            FragmentSaveStreamFile(_fragmentJpx.streamFileName, _fragmentJpx.inJPG2FileName, _fileInformation);

            return(true);
        }
Exemplo n.º 2
0
        private bool FragmentSaveStreamFile(string streamFileName, string inFileName, Jpeg2000FileInformation fileInformation)
        {
            int index;

            byte[] buffer;

            //Load Box Data File
            FileStream streamFile = File.Open(streamFileName, FileMode.Create);

            if (streamFile == null)
            {
                return(false);
            }

            FileStream inFile = File.Open(inFileName, FileMode.Open);

            if (inFile == null)
            {
                return(false);
            }

            buffer = new byte[inFile.Length];
            if (buffer == null)
            {
                return(false);
            }

            for (index = 0; index < fileInformation.CodeStream.Length; index++)
            {
                inFile.Seek(fileInformation.CodeStream[index].DataOffset, SeekOrigin.Begin);
                inFile.Read(buffer, 0, Convert.ToInt32(fileInformation.CodeStream[index].DataSize));
                streamFile.Write(buffer, 0, Convert.ToInt32(fileInformation.CodeStream[index].DataSize));
            }
            inFile.Close();
            streamFile.Close();
            return(true);
        }