Exemplo n.º 1
0
        /// <summary>
        /// Read image flags from the file
        /// </summary>
        public void ReadFlags(BufferReader reader, int offset)
        {
            CalibRange_min = reader.ReadSingleBE(offset + 92);
            CalibRange_max = reader.ReadSingleBE(offset + 96);


            Device           = reader.ReadNullTerminatedString(offset + 142, 12);
            DeviceSerial     = reader.ReadNullTerminatedString(offset + 186, 16);
            Optics           = reader.ReadNullTerminatedString(offset + 202, 32);
            OpticsResolution = reader.ReadNullTerminatedString(offset + 234, 32);
            OpticsText       = reader.ReadNullTerminatedString(offset + 554, 48);

            ShotRange_start_ERROR = reader.ReadSingleBE(offset + 532);
            ShotRange_size        = reader.ReadSingleBE(offset + 536);


            TimeStamp_Raw         = reader.ReadDoubleBE(8, offset + 540);
            TimeStampMilliseconds = reader.ReadIntBE(offset + 548);
            ImgAccu        = reader.ReadWordBE(offset + 580);
            ZoomHorizontal = reader.ReadWordBE(offset + 596);
            ZoomVertical   = reader.ReadWordBE(offset + 604);
            TimeStamp      = Double2DateTime(TimeStamp_Raw, TimeStampMilliseconds);
        }
Exemplo n.º 2
0
        private float[,,] ReadVisibleImageData(BufferReader reader, int bindata_offset, int width, int height, int palette_offset, int useCompression)
        {
            int  data_size = width * height; //- count of pixles
            bool useComp   = (useCompression == 1);

            int pixelCount = data_size;

            float[] matrixData = new float[pixelCount];

            int matrixDataPos = 0;

            int v1_pos = bindata_offset;
            int v2_pos = v1_pos + width * height; //- used if data are compressed

            //byte data_v1 = &bindata[v1_pos];
            //unsigned char* data_v2 = &bindata[v2_pos];

            int   v1 = 0;
            int   v2 = 0;
            int   v3 = 0;
            int   v4 = 0;
            var   argb = 0;
            float v = 0;
            float f, f1, f2, f3;

            VisiblePalette = ReadVisiblePallet(reader, palette_offset);

            if (!useComp)
            {
                for (int i = pixelCount; i > 0; i--)
                {
                    //- read value
                    v1 = reader.ReadByte(v1_pos);
                    v1_pos++;
                    v2 = reader.ReadByte(v1_pos);
                    v1_pos++;

                    f1 = (float)v1 * (1.0f / 256.0f);
                    f2 = (float)v2 * (1.0f / 256.0f);
                    f3 = (float)v3 * (1.0f / 256.0f);

                    //- lineare interpolation
                    v = Palette[v1 + 1] * f1 + Palette[v2] * (1.0f - f1); //v1 v2

                    if (v < 0)
                    {
                        v = 0;        //- oder 255
                    }
                    matrixData[matrixDataPos] = v;
                    matrixDataPos++;
                }
            }
            else
            {
                for (int i = pixelCount; i > 0; i--)
                {
                    //- read value
                    v1 = reader.ReadByte(v1_pos);
                    v1_pos++;
                    v2 = reader.ReadByte(v1_pos);
                    v1_pos++;

                    f1 = (float)v1 * (1.0f / 256.0f);
                    f2 = (float)v2 * (1.0f / 256.0f);
                    f3 = (float)v3 * (1.0f / 256.0f);

                    //- lineare interpolation
                    v = Palette[v2 + 1] * f1 + Palette[v1] * (1.0f - f1); //v1 v2

                    if (v < 0)
                    {
                        v = 0;        //- oder 255
                    }
                    matrixData[matrixDataPos] = v;
                    matrixDataPos++;
                }
            }

            float[,] imageMatrix = new float[Width, Height];

            for (matrixDataPos = 0; matrixDataPos < pixelCount; matrixDataPos++)
            {
                var i = matrixDataPos % Width;
                var j = matrixDataPos / Width;
                imageMatrix[i, j] = matrixData[matrixDataPos];
            }

            var minValue = float.MaxValue;
            var maxValue = float.MinValue;

            for (int i = 0; i < Width; i++)
            {
                for (int j = 0; j < Height; j++)
                {
                    maxValue = Math.Max(maxValue, imageMatrix[i, j]);
                    minValue = Math.Min(minValue, imageMatrix[i, j]);
                }
            }

            var imageScale = 255.0f / (maxValue - minValue);

            for (int i = 0; i < Width; i++)
            {
                for (int j = 0; j < Height; j++)
                {
                    imageMatrix[i, j] = (int)((imageMatrix[i, j] - minValue) * imageScale);
                }
            }

            float[,,] rgbImageMatrix = new float[Width, Height, 3];

            for (int i = 1; i < Width - 1; i++)
            {
                for (int j = 1; j < Height - 1; j++)
                {
                    //blue
                    if (i % 2 == 0 && j % 2 == 0)
                    {
                        rgbImageMatrix[i, j, 0] = (imageMatrix[i - 1, j - 1] + imageMatrix[i - 1, j + 1] + imageMatrix[i + 1, j - 1] + imageMatrix[i + 1, j + 1]) / 4;
                        rgbImageMatrix[i, j, 1] = (imageMatrix[i - 1, j] + imageMatrix[i, j - 1] + imageMatrix[i, j + 1] + imageMatrix[i + 1, j]) / 4;
                        rgbImageMatrix[i, j, 2] = imageMatrix[i, j];
                    }
                    //green
                    if ((i % 2 == 0 && j % 2 != 0) || (i % 2 != 0 && j % 2 == 0))
                    {
                        rgbImageMatrix[i, j, 2] = (imageMatrix[i - 1, j] + imageMatrix[i + 1, j]) / 2;
                        rgbImageMatrix[i, j, 1] = imageMatrix[i, j];
                        rgbImageMatrix[i, j, 0] = (imageMatrix[i, j - 1] + imageMatrix[i, j + 1]) / 2;
                    }
                    //red
                    if (i % 2 != 0 && j % 2 != 0)
                    {
                        rgbImageMatrix[i, j, 0] = imageMatrix[i, j];
                        rgbImageMatrix[i, j, 1] = (imageMatrix[i - 1, j] + imageMatrix[i, j - 1] + imageMatrix[i, j + 1] + imageMatrix[i + 1, j]) / 4;
                        rgbImageMatrix[i, j, 2] = (imageMatrix[i - 1, j - 1] + imageMatrix[i - 1, j + 1] + imageMatrix[i + 1, j - 1] + imageMatrix[i + 1, j + 1]) / 4;

                        //float[] mat = { rgbImageMatrix[i, j, 0], rgbImageMatrix[i, j, 1], rgbImageMatrix[i, j, 2] };

                        //var res = applySaturation(mat, 1.5f);
                        //for (int k = 0; k < 3; k++)
                        //    rgbImageMatrix[i, j, k] = res[k];
                    }
                }
            }

            return(rgbImageMatrix);
        }
Exemplo n.º 3
0
        /// <summary>
        /// Read the image data from file
        /// </summary>
        /// <returns></returns>
        private float[] ReadImageData(BufferReader reader, int bindata_offset, int width, int height, int palette_offset, int useCompression)
        {
            int  data_size = width * height; //- count of pixles
            bool useComp   = (useCompression == 1);

            int pixelCount = data_size;

            float[] matrixData = new float[pixelCount];

            int matrixDataPos = 0;

            int v1_pos = bindata_offset;
            int v2_pos = v1_pos + width * height; //- used if data are compressed

            //byte data_v1 = &bindata[v1_pos];
            //unsigned char* data_v2 = &bindata[v2_pos];

            int v1 = 0;
            int v2 = 0;


            Palette = ReadPallet(reader, palette_offset);


            int   v2_count = 0;
            float v        = 0;
            float f;

            if (!useComp)
            {
                for (int i = pixelCount; i > 0; i--)
                {
                    //- read values
                    v1 = reader.ReadByte(v1_pos);
                    v1_pos++;
                    v2 = reader.ReadByte(v1_pos);
                    v1_pos++;

                    f = (float)v1 * (1.0f / 256.0f);

                    //- lineare interpolation
                    v = Palette[v2 + 1] * f + Palette[v2] * (1.0f - f);

                    if (v < 0)
                    {
                        v = 0;        //- oder 255
                    }
                    matrixData[matrixDataPos] = v;
                    matrixDataPos++;
                }
            }
            else
            {
                for (int i = pixelCount; i > 0; i--)
                {
                    //- werte lesen
                    if (v2_count-- < 1) //- ok... neuen wert für V2 lesen
                    {
                        v2_count = reader.ReadByte(v2_pos) - 1;
                        v2_pos++;

                        v2 = reader.ReadByte(v2_pos);
                        v2_pos++;
                    }

                    v1 = reader.ReadByte(v1_pos);
                    v1_pos++;

                    f = (float)v1 * (1.0f / 256.0f);

                    //- lineare interpolation
                    v = Palette[v2 + 1] * f + Palette[v2] * (1.0f - f);

                    if (v < 0)
                    {
                        v = 0;        //- oder 255
                    }
                    matrixData[matrixDataPos] = v;
                    matrixDataPos++;
                }
            }
            tempMatrix = new float[Width, Height];
            for (matrixDataPos = 0; matrixDataPos < pixelCount; matrixDataPos++)
            {
                var i = matrixDataPos % Width;
                var j = matrixDataPos / Width;
                tempMatrix[i, j] = matrixData[matrixDataPos];
            }
            return(matrixData);
        }
Exemplo n.º 4
0
        /// <summary>
        /// Read a image from the file
        /// </summary>
        public bool ReadImage(int imageIndex)
        {
            System.DateTime FrameTime = System.DateTime.Now;


            var reader = new BufferReader(this.reader.GetImageData(imageIndex));

            if (reader.Eof)
            {
                return(false);
            }

            Width  = 0;
            Height = 0;
            var i = 0;

            //- Image header
            BytePerPixel = reader.ReadWordBE();
            Compressed   = reader.ReadWordBE();
            Width        = reader.ReadWordBE();
            Height       = reader.ReadWordBE();


            UpperLeftX = reader.ReadWordBE();
            UpperLeftY = reader.ReadWordBE();

            FirstValidX = reader.ReadWordBE();


            LastValidX = reader.ReadWordBE();


            FirstValidY = reader.ReadWordBE();


            LastValidY = reader.ReadWordBE();
            Position   = reader.ReadSingleBE();

            Emissivity = reader.ReadSingleBE();

            Distanz = reader.ReadSingleBE();

            EnvironmentalTemp = reader.ReadSingleBE();


            AbsoConst       = reader.ReadSingleBE();
            PathTemperature = reader.ReadSingleBE();
            Version         = reader.ReadLongBE();

            //for (int pos = 0; pos < 1567; pos++)
            //    cbData[pos] = reader.ReadByte();

            Level        = reader.ReadSingleBE();
            Span         = reader.ReadSingleBE();
            ImgTime      = reader.ReadDoubleBE(8);
            ImgMilliTime = reader.ReadIntBE();
            //TimeStamp = Double2DateTime(ImgTime, (int)ImgMilliTime);
            ImgAccu        = reader.ReadWordBE();
            ImageComment   = reader.ReadStr(79, 0);
            ZoomHorizontal = reader.ReadSingleBE();
            ZoomVertical   = reader.ReadSingleBE();


            i = reader.ReadWordBE();
            i = reader.ReadWordBE();
            i = reader.ReadWordBE();
            i = reader.ReadWordBE();


            if ((Width > 10000) || (Height > 10000))
            {
                Width  = 1;
                Height = 1;
                return(false);
            }

            this.ReadFlags(reader, 1084);

            Data = ReadImageData(reader, 0x6C0, Width, Height, 60, Compressed);



            if (reader.Eof)
            {
                return(false);
            }

            return(true);
        }