示例#1
0
        /*   ImageFrame extractPixels(Image image, ImageSetting imageSetting)
        {
            ImageFrame imageFrame = new ImageFrame();
            Bitmap source = new Bitmap(image);
            int RPixel;
            int GPixel;
            int BPixel;

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

                for (int j = 0; j < image.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;
        }
        */
        Image reProcessFrame( Image prevImage, FrameData frameData, ImageSetting imageSetting)
        {
            Image image;
            Bitmap bitmap = new Bitmap(imageSetting.Width,imageSetting.Height);
            Bitmap prevBitmap = new Bitmap(prevImage);
            int RPixel;
            int GPixel;
            int BPixel;

            int columnChangeNum =0;

            int row =0;

            int changedBlockNum =0;

            bool rowChanges = false;
            bool blockChange = false;

            for (int i = 0; i < imageSetting.Height; i += imageSetting.BlockSize)
            {
                if (frameData.rowChangeBits[i])
                {
                    rowChanges = true;
                    row++;
                }

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

                    columnChangeNum = row * imageSetting.Width/imageSetting.BlockSize + j;
                    blockChange = frameData.columnChangeBits[columnChangeNum];
                     for (int k = i; k < imageSetting.BlockSize; k++)
                        for (int l = j; l < imageSetting.BlockSize; l++)
                        {
                            if (rowChanges && blockChange)
                            {

                                RPixel = frameData.RPixels[changedBlockNum];
                                GPixel = frameData.GPixels[changedBlockNum];
                                BPixel = frameData.BPixels[changedBlockNum]; ;

                                changedBlockNum++;
                            }
                            else
                            {
                                RPixel = prevBitmap.GetPixel(k, l).R;
                                GPixel = prevBitmap.GetPixel(k, l).G;
                                BPixel = prevBitmap.GetPixel(k, l).B;

                            }
                             Color newcol = Color.FromArgb(RPixel, GPixel, BPixel);
                             bitmap.SetPixel(k, l, newcol);

                    }

                }

            }

            image = (Image)bitmap;

            return image;
        }
示例#2
0
        /*private void cmdImageSize_Click(object sender, EventArgs e)
        {

            try
            {
                byte[] buffer = new byte[1024];
                int iRx = socClient.Receive(buffer);
                char[] chars = new char[iRx];
                System.Text.Decoder d = System.Text.Encoding.UTF8.GetDecoder();
                int charLen = d.GetChars(buffer, 0, iRx, chars, 0);
                String szData = new String(chars);
                sze = Convert.ToInt32(szData);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }

        }

          */
        private void receiveImage(Object obj)
        {
            int time = 0;
            int FrameNumber;
            int currentFrame;
            char state = 'd';

            byte special = 0;

            int recSize = 0;
            byte[] buffer = new byte[1024];

            int prevFrame = 0;

            Boolean receive = false;

            Image image;
            FrameData frameData;

            int ticks = Environment.TickCount;

            try
            {
                socClient.ReceiveBufferSize = 1024;
                socClient.SendBufferSize = 1024;
                while (true)
                {
                    recSize = 0;
                    lock (this)
                    {

                        {

                            FrameNumber = FRAMENUMBER;
                            receive = onReceive;
                            //currentFrame = (currentFrameNumber + FrameNumber) % FrameNumber;

                        }
                        ticks = Environment.TickCount;

                        try
                        {
                            imageSetting = recImageSetting();

             //                   MessageBox.Show(imageSetting.Width.ToString() + "X" + imageSetting.Height.ToString() + "X" + imageSetting.BlockSize.ToString() + "X" + imageSetting.ColorBits.ToString() + "ccccc");
                        }
                        catch(Exception ex)
                        {
                            MessageBox.Show("Error in receiving imageSetting... in CCCCCCCCCCCCCCCCCCCCCCC");
                        }

                        while (receive)
                        {

                            lock (this)
                            {

                                currentFrame = (currentFrameNumber + FrameNumber) % FrameNumber;
                            //    state = states[currentFrame];

                            }

                            prevFrame = (currentFrame - 1 + FrameNumber) % FrameNumber;

                               try
                               {
                                   special = recSpecial();
                             //      MessageBox.Show("ccccccccccccccSpecial" + special.ToString());
                               }
                               catch (Exception ex)
                               {
                                   MessageBox.Show("Error on receiving special" + ex.ToString());
                               }

                               if (special == 0)
                               {
                                   state = 'N';
                               }
                               else if (special == 1)
                               {
                                   state = 'P';
                               }
                               else if (special == 2)
                               {
                                   state = 'M';
                               }

                               try
                               {
                                   recSize = recieveSize();
                               //    MessageBox.Show("Receive video size + " + recSize.ToString());

                               }
                               catch (FormatException ex)
                               {
                                   Console.WriteLine("NumberFormateException");
                               }

                            List<byte> totalByte = new List<byte>();
                            int recQue = recSize / 1024;
                            int recRem = recSize % 1024;
                            int total = recQue * 1024 + recRem;
                            Console.WriteLine("frame size in kb = ...." + recQue + "remainder = " + recRem + " and total = "+total);
                            int count = 0;
                            while(count!=recQue)
                            {
                                try
                                {
                                    buffer = new byte[1024];
                                    buffer = recData();
                                    foreach (byte b in buffer)
                                    {
                                        totalByte.Add(b);
                                    }
                                }
                                catch (Exception ex)
                                {
                                    MessageBox.Show(ex.ToString());
                                }
                                count++;
                            }
                            //remaining picture ko lagi........
                            buffer = new byte[recRem];
                            int iRx = socClient.Receive(buffer);
                            foreach (byte b in buffer)
                            {
                                totalByte.Add(b);

                            }

                            MessageBox.Show("ccccccccccccafter receiving actual data" + recSize.ToString() + " " + totalByte[0] + " " + totalByte[recSize - 1]);
                            Console.WriteLine("  Before calling sending bact to  endccccccccccccccccccccccccc....");
                            try
                            {
                                       sendData(BitConverter.GetBytes(special));
                            }
                            catch (Exception ex)
                            {
                                Console.WriteLine("sending end error in cccccccccccccccccccccccccc" + ex.ToString());
                            }

                            Console.WriteLine("ccccccccccccccccccccccccccccccccccccccccccc  before conversion to image...");

                            if (state == 'N')
                            {
                                lock (this)
                                {
                                    images[currentFrame] = images[prevFrame];
                                    //imageFrames[currentFrame] = imageFrames[prevFrame];
                                    framesData[currentFrame] = null;
                                    states[currentFrame] = 'N';
                                }
                            }
                            else if (state == 'P')
                            {
                                frameData = new FrameData(totalByte.ToArray(),  imageSetting);
                                lock (this)
                                {

                                    framesData[currentFrame] = frameData;
                                    states[currentFrame] = 'P';
                                }

                            }
                            else if (state == 'M')
                            {
                                image = byteArrayToImage(totalByte.ToArray());
                                lock (this)
                                {

                                    images[currentFrame] = image;
                                    framesData[currentFrame] = null;
                                    states[currentFrame] = 'M';
                                }

                            }

                            //Console.WriteLine("ccccccccccccccccccccccccccccccccccccccccccc  After conversion to image....");

                            //Console.WriteLine("ccccccccccccccccccccccccccccccccccccccccccc after pictureBox1 called....");
                            //byData = System.Text.Encoding.ASCII.GetBytes("SHSHSHSH");
                            //Console.WriteLine("sending  shshssh to server.....");
                            //sendData(byData);
                            //Console.WriteLine("after sending shshshshs  to server........");

                            lock (this)
                            {
                             //   images[currentFrame] = img;
                               // states[currentFrame] = 'p';
                                currentFrameNumber = (currentFrameNumber + 1) % FrameNumber;
                            }
                            time = 1000 / FrameNumber - (Environment.TickCount - ticks);

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

                    }
                }
            }
            catch (SocketException ex)
            {
                MessageBox.Show("receiveImage() function \n"+"server has been closed..");
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error in receive Image!" + ex.ToString());

            }
        }