コード例 #1
0
ファイル: ServerFrm.cs プロジェクト: dipendra009/IBO
        private void processImage(Object obj)
        {
            int ticks = 0;
            int time = 0;

            ticks = Environment.TickCount;
            //Console.WriteLine("Time Elapsed +++++++"+ticks.ToString());
            //Image image;

            int FrameNumber;
            int currentFrame;
            int prevFrame;
            char state = 'd';
            Boolean capture = false;
            Boolean send = false;
            int synch = 0;
            ImageFrame imageFrame = new ImageFrame();
            ImageFrame prevImageFrame = new ImageFrame();
            FrameData frameData = new FrameData();
            try
            {
            while (true)
            {
                lock (this)
                {

                    FrameNumber = FRAMENUMBER;
                    capture = onCapture;
              //          currentFrame = (currentFrameNumber - 1 + FrameNumber) % FrameNumber;
                    send = onSending;
                }

               // Thread.Sleep(1000);
                Thread.Sleep(1000 / FrameNumber * 2);
                try
                {
                    while (send && capture)
                {
                    lock (this)
                    {
                        currentFrame = (currentFrameNumber - 1 + FrameNumber) % FrameNumber;
                        state = states[currentFrame];
                    }
                    prevFrame = (currentFrame - 1 + FrameNumber) % FrameNumber;

                    if (state != 'p')
                    {
                        //Thread.Sleep(1000 / FrameNumber);
                        //Console.WriteLine("THis is inside processing.not synchronized.." + currentFrame+state+synch);
                        //time = 1000 / FrameNumber - (Environment.TickCount - ticks);
                        //if (time > 0)
                        //Thread.Sleep(time);
                        //synch++;
                        //ticks = Environment.TickCount;
                        //currentFrame = (currentFrame + 1) % FrameNumber;
                        //if(synch < FrameNumber)
                        continue;
                    }
                    synch = 0;

                    lock (this)
                    {
                        imageFrame = imageFrames[currentFrame];
                        prevImageFrame = imageFrames[prevFrame];
                        states[currentFrame] = 's';

                    }
                    lock (this)
                    {
                        frameData = processFrames(imageFrame, prevImageFrame, imageSetting);
                    }

                    lock (this)
                    {
                        framesData[currentFrame] = frameData;
                    }

                    //currentFrame = (currentFrame + 1) % FrameNumber;
                    //Console.WriteLine("THis is inside process..." + currentFrame);
                    time = 1000 / FrameNumber - (Environment.TickCount - ticks);

                    if (time > 0)
                        Thread.Sleep(time);
                    //else
                    //    Console.WriteLine("no sleeping..." + (-time).ToString());
                    ticks = Environment.TickCount;

                }
                }
                catch(Exception ex)
                {
                     MessageBox.Show("Error in process thread!"+ex.ToString());
                }
                 }
                }
                catch(Exception ex)
                {
                    MessageBox.Show("Error in processing!"+ex.ToString());
                }
        }
コード例 #2
0
ファイル: ServerFrm.cs プロジェクト: dipendra009/IBO
        ImageFrame extractPixels(Bitmap source, ImageSetting imageSetting)
        {
            ImageFrame imageFrame = new ImageFrame();
            int width = imageSetting.Width;
            int height = imageSetting.Height;
            //MessageBox.Show("I lll" + image.Height+ width+ height);
               // Bitmap source = null;//= new Bitmap(width, height, PixelFormat.Format24bppRgb);

             int RPixel;
            int GPixel;
            int BPixel;

            for(int i =0; i<imageSetting.Width; i+=imageSetting.BlockSize)

                for (int j = 0; j < imageSetting.Height; j += imageSetting.BlockSize)
                {
                    RPixel = 0;
                    GPixel = 0;
                    BPixel = 0;
                    for (int k = i; k < imageSetting.BlockSize; k++)
                        for (int l = j; l < imageSetting.BlockSize; l++)
                        {
                            RPixel += source.GetPixel(k, l).R;
                            GPixel += source.GetPixel(k, l).G;
                            BPixel += source.GetPixel(k, l).B;
                        }
                    RPixel /= imageSetting.BlockSize;
                    GPixel /= imageSetting.BlockSize;
                    BPixel /= imageSetting.BlockSize;

                    imageFrame.RPixels.Add(toByte(RPixel));
                    imageFrame.GPixels.Add(toByte(GPixel));
                    imageFrame.BPixels.Add(toByte(BPixel));

                }
            return imageFrame;
        }
コード例 #3
0
ファイル: ServerFrm.cs プロジェクト: dipendra009/IBO
        FrameData processFrames(ImageFrame imageFrame, ImageFrame prevImageFrame, ImageSetting imageSetting)
        {
            int blockChange = 0;

            FrameData frameData = new FrameData();
            List<bool> rowChangeBits = new List<bool>();
                List<bool> columnChangeBits = new List<bool>();

            for(int i =0;i<imageSetting.Height/imageSetting.BlockSize;i++)
            {
                bool rowChange = false;
                List<bool> columnChange = new List<bool>();

                int rowFirstBlock = imageSetting.Height/imageSetting.BlockSize*i;

                for (int j = 0; j < imageSetting.Width / imageSetting.BlockSize; j++)
                {
                    bool changeBlock = false;
                    int position = rowFirstBlock + j;

                    if (!imageFrame.RPixels.ElementAt(position).Equals(prevImageFrame.RPixels.ElementAt(position)))
                        changeBlock = true;

                    if (!imageFrame.GPixels.ElementAt(position).Equals(prevImageFrame.GPixels.ElementAt(position)))
                        changeBlock = true;

                    if (!imageFrame.BPixels.ElementAt(position).Equals(prevImageFrame.BPixels.ElementAt(position)))
                        changeBlock = true;
                    if (changeBlock)
                    {
                        blockChange++;
                        rowChange = true;
                        columnChange.Add(true);

                        frameData.RPixels.Add(imageFrame.RPixels.ElementAt(position));
                        frameData.GPixels.Add(imageFrame.GPixels.ElementAt(position));
                        frameData.BPixels.Add(imageFrame.BPixels.ElementAt(position));

                    }
                    else
                    {
                        columnChange.Add(false);
                    }

                }
                if (rowChange)
                {
                    rowChangeBits.Add(true);
                    columnChangeBits.AddRange(columnChange);
                }
                else
                {
                    rowChangeBits.Add(false);
                }

            }
            frameData.rowChangeBits = new BitArray(rowChangeBits.ToArray());
            frameData.columnChangeBits = new BitArray(columnChangeBits.ToArray());
            //MessageBox.Show("int processImageLLLLLLLLLLLLLLLLLLLlll" + "frame Data : rowchange" + frameData.rowChangeBits.Length + "frame Data : colchange" + frameData.columnChangeBits.Length +
            //       "frame Data : RP" + frameData.RPixels.Count + "frame Data : GP" + frameData.GPixels.Count +
            //           "frame Data :BP" + frameData.BPixels.Count);

            return frameData;
        }
コード例 #4
0
ファイル: ServerFrm.cs プロジェクト: dipendra009/IBO
        private void captureImage(Object obj)
        {
            int ticks = 0;
            int time = 0;

            int FrameNumber;
            int currentFrame;
            char state = 'd';
            Boolean capture = false;
            Boolean send = false;
            int synch = 0;
            Image imagCapture;
            ImageFrame imageFrame = new ImageFrame();
            ImageSetting imageSett = new ImageSetting();
            Bitmap bitmap;
            try
            {

                while (true)

                {
                    //Console.WriteLine("Hello capturing");
                    lock (this)
                    {
                        FrameNumber = FRAMENUMBER;
                        currentFrame = currentFrameNumber;
                        capture = onCapture;
                        imageSett = imageSetting;
                    }
                    ticks = Environment.TickCount;

                    //Thread.Sleep(1000);
                    while (capture)
                    {
                        if(send == false)
                        lock(this)
                        {
                        send = onSending;
                        }
                        try
                        {
                          //  Bitmap bitmap;
                            lock (this)
                            {

                                imagCapture = pictureBox1.Image;
                            //    bitmap = new Bitmap(pictureBox1.Image);

                            }
                            if (imagCapture == null)
                            {
                      //          MessageBox.Show("imagCapture is null");
                                continue;
                            }
                             lock(this)
                            {
                                currentFrame = currentFrameNumber;
                                states[currentFrame] = 'p';
                            }

                            int width = imageSett.Width;
                            int height = imageSett.Height;

                            try
                            {

                                bitmap = new Bitmap(imagCapture, width, height);
                                imageFrame = extractPixels(bitmap, imageSett);

                            }
                            catch (Exception ex)
                            {
                                //MessageBox.Show("Error in bitmap" + ex.ToString());
                                continue;
                            }

                            lock (this)
                            {
                                images[currentFrame] = imagCapture;
                                imageFrames[currentFrame] = imageFrame;
                            }
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show("Error in capturing...thread"+ex.ToString());

                        }

                        //Increment the current frame of program
                        lock (this)
                        {
                                currentFrameNumber = (currentFrameNumber + 1) % FrameNumber;

                        }
                        time = 1000 / FrameNumber - (Environment.TickCount - ticks);   // k ho yo..............

                        if (time > 0)
                        {
                            Thread.Sleep(time);
                            //Console.WriteLine("Thread Sleep");
                        }
                        //else
                        //    Console.WriteLine("no sleeping..." + (-time).ToString());
                        ticks = Environment.TickCount;
                    }
                }

            }
            catch (Exception ex)
            {
                MessageBox.Show("Error in capture Image!"+ex.ToString());
              }
        }