private void sendImage(Object obj) { //Console.WriteLine("Inside SendImage............"); try { int time = 0; Image image; int FrameNumber; int currentFrame = 0; char state = 'd'; byte[] buffer = new byte[1024]; Boolean capture = false; Boolean send = false; int sendSize = 0; bool first = true; byte[] imageBytes = null; byte[] frameBytes = null; FrameData frameData = new FrameData() ; byte[] sendingData; int synch = 0; int size = 0; int ticks = Environment.TickCount; byte special = 0; while (true) { lock (this) { FrameNumber = FRAMENUMBER; capture = onCapture; send = onSending; } //Thread.Sleep(1000); Thread.Sleep(1000 / FrameNumber * 3); try { Console.WriteLine("before sending settings......." + sendSize.ToString()); //MessageBox.Show(imageSetting.Width.ToString() + "X" + imageSetting.Height.ToString() + "X" + imageSetting.BlockSize.ToString() + "X" + imageSetting.ColorBits.ToString() + "ssssssssssssssss"); sendingData = imageSetting.toByte(); //sendData(sendingData); } catch (Exception ex) { MessageBox.Show("Error on sending setting" + ex.ToString()); } try { //Console.WriteLine("State of onSending and onCapturing=" + send + capture); while (send && capture) { lock (this) { currentFrame = (currentFrameNumber - 2 + FrameNumber) % FrameNumber; state = states[currentFrame]; } //Console.WriteLine("state = " + state.ToString()); if (state != 's') { //Console.WriteLine("THis is inside sending..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) { image = images[currentFrame]; frameData = framesData[currentFrame]; } //Testing frameData begins int row = frameData.rowChangeBits.Length; int colm = frameData.columnChangeBits.Length; int col = frameData.RPixels.Count; if (row > 0) Console.WriteLine("Before convertions of frameData: row: "+row+" "+frameData.rowChangeBits.Get(0)+ " "+frameData.rowChangeBits.Get(row - 1)); if (colm > 0) Console.WriteLine( " col "+colm+frameData.columnChangeBits.Get(0)+ frameData.columnChangeBits.Get(colm - 1) + " rp: "+col + " "+frameData.RPixels[0]+ " "+frameData.RPixels[col-1]); frameData = new FrameData(frameData.toBytes(), imageSetting); row = frameData.rowChangeBits.Length; colm = frameData.columnChangeBits.Length; col = frameData.RPixels.Count; if(row> 0) Console.WriteLine("After convertions of frameData: row: "+row+" "+frameData.rowChangeBits.Get(0)+ " "+frameData.rowChangeBits.Get(row - 1)); if(colm >0) Console.WriteLine( " col "+colm+frameData.columnChangeBits.Get(0)+ frameData.columnChangeBits.Get(colm - 1) + " rp: "+col + " "+frameData.RPixels[0]+ " "+frameData.RPixels[col-1]); //Testing frameData complete if (image == null) { // MessageBox.Show("image null in sending SSSSSSSSS"); continue; } else { imageBytes = imageToByteArray(image); } if (frameData == null) { //MessageBox.Show("ssssssssssssssssssSpecial" + BitConverter.GetBytes(special).Length); //continue; continue; } else { frameBytes = frameData.toBytes(); } totalData += imageBytes.Length; ImageSetting imageSett; lock (this) { imageSett = imageSetting; } try { if ((frameData.columnChangeBits.Length == 0)&& !first) { special= 0; //sendData(BitConverter.GetBytes(special)); //MessageBox.Show("ssssssssssssssssssSpecial" + BitConverter.GetBytes(special).Length); totalSentData++; } else { if ((frameBytes.Length < imageBytes.Length)&& !first) { special = 1; //sendData(BitConverter.GetBytes(special)); sendingData = frameBytes; //MessageBox.Show("ssssssssssssssssssSpecial" + BitConverter.GetBytes(special).Length); //Testing frameData = new FrameData(sendingData.ToArray(), imageSett); // MessageBox.Show("sended size: " + sendingData.Length + "frameData size " + frameData.toBytes().Length + // "imageSett: " + imageSett.Height + imageSett.Width + imageSett.BlockSize + imageSett.ColorBits + // "LLLLLLLLLLLLLLLLLLLlll" + "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); Image prevImage; int prevN = (currentFrame - 1 + FrameNumber) % FrameNumber; lock (this) { prevImage = images[prevN]; } image = reProcessFrame(prevImage, frameData, imageSett); pictureBox2.Image = image; } else { special = 2; sendSize = imageBytes.Length; sendingData = imageBytes; //MessageBox.Show("Special sizessssssssssssssssssSpecial" + BitConverter.GetBytes(special).Length); //sendData(BitConverter.GetBytes(special)); //Testing image = byteArrayToImage(sendingData.ToArray()); pictureBox2.Image = image; } totalSentData += sendSize; try { Console.WriteLine("before sending size.......size = " + sendSize.ToString()); byData = System.Text.Encoding.ASCII.GetBytes(sendSize.ToString()); //MessageBox.Show("sssssssssssReceive video size + " + sendSize.ToString() + " " + byData.Length + " " + byData[0] + " " + byData[1] + " " + byData[2] + " " + byData[3] + " " + byData[4] + " " + byData[5] ); //sendData(byData); Console.WriteLine("after sending size......."); sendFrames++; } catch (Exception ex) { MessageBox.Show("Error on sending size" + ex.ToString()); } try { Console.WriteLine("before sending actual data :"); // MessageBox.Show("Before sending actual data" + sendSize.ToString()+" "+sendingData[0]+" "+sendingData[sendSize-1]); //sendData(sendingData); // MessageBox.Show(" after sending actual data :"); } catch (Exception ex) { MessageBox.Show("Error on sending video in sending actual data" + ex.ToString()); } } } catch (Exception ex) { Console.WriteLine("sending special error in sssssssssssssss"+ex.ToString()); } // Console.WriteLine("ccccccccccccccccccccccccccccccccccccccccccc after cxalling recsize...." + recSize); //byte[] spec = new byte[1]; //spec[0] = special; Console.WriteLine(" Before calling sending bact to server end...."); try { // //sendData(BitConverter.GetBytes(special)); } catch (Exception ex) { Console.WriteLine("sending end error in sssssssssssssss"+ex.ToString()); } // try // { // byte sp; // //do // //{ // // //sp = recSpecial(); // //}while(sp != special); // //} // catch (Exception ex) // { // Console.WriteLine("receiving end error in sssssssssssssss"+ex.ToString()); // } //} //Testing portion begins............................................. // ImageSetting imageSett; // lock (this) // { // imageSett = imageSetting; // } //if(special == 0) //{ //} //else if(special == 1) //{ // frameData = new FrameData(sendingData.ToArray(), imageSett); //Image prevImage; // int prevN = (currentFrame -1 +FrameNumber)%FrameNumber; // lock(this) // { // prevImage = images[prevN]; // } // image = reProcessFrame(prevImage, frameData, imageSett); // pictureBox2.Image = image; //} //else if(special == 2) //{ // image = byteArrayToImage(sendingData.ToArray()); // pictureBox2.Image = image; //} //else //{ // MessageBox.Show("IIIIIIIIIIII"); //} //Testing portion ends......................................... lock(this) { states[currentFrame] = 'c'; } first = false; time = 1000 / FrameNumber - (Environment.TickCount - ticks); if (time > 0) Thread.Sleep(time); //else // Console.WriteLine("no sleeping..." + (-time).ToString()); ticks = Environment.TickCount; //currentFrame = (currentFrame + 1 + FrameNumber) % FrameNumber; } } catch (Exception ex) { MessageBox.Show("Error in sending thread...!"+ex.ToString()); } } } catch (Exception ex) { Console.WriteLine("Error in sending...!"); } }
Image reProcessFrame(Image prevImage, FrameData frameData, ImageSetting imageSetting) { Image image; Bitmap bitmap = new Bitmap(imageSetting.Width, imageSetting.Height); Bitmap prevBitmap = new Bitmap(prevImage); bitmap = prevBitmap; int RPixel; int GPixel; int BPixel; int columnChangeNum = 0; int row = -1; int changedBlockNum = 0; bool rowChanges = false; bool blockChange = false; int i=0; int j=0; try { for ( i = 0; i < imageSetting.Height; i += imageSetting.BlockSize) { if (frameData.rowChangeBits[i/imageSetting.BlockSize]) { rowChanges = true; row++; } else continue; for ( j = 0; j < imageSetting.Width; j += imageSetting.BlockSize) { columnChangeNum = row * imageSetting.Width / imageSetting.BlockSize + j/imageSetting.BlockSize; blockChange = frameData.columnChangeBits[columnChangeNum]; if (!blockChange) continue; else { RPixel = frameData.RPixels[changedBlockNum]; GPixel = frameData.GPixels[changedBlockNum]; BPixel = frameData.BPixels[changedBlockNum]; ; changedBlockNum++; for (int k = i; k < imageSetting.BlockSize; k++) for (int l = j; l < imageSetting.BlockSize; l++) { Color newcol = Color.FromArgb(RPixel, GPixel, BPixel); bitmap.SetPixel(k, l, newcol); } } } } image = (Image)bitmap; return image; } catch (Exception ex) { MessageBox.Show("repocess frameLLLLLLLLLLLLLLLLLLLlll" + " frame Data : rowchange"+frameData.rowChangeBits.Length+ " frame Data : colchange"+frameData.columnChangeBits.Length+ "frame Data : RP"+frameData.RPixels.Count+ " frame Data : GP"+frameData.GPixels.Count+" rowchange "+rowChanges +" i "+i+" j "+j+ " frame Data :BP"+frameData.BPixels.Count+" blcok change "+blockChange+" changedBlockNum"+changedBlockNum +"change col "+columnChangeNum+"ex "+ex.ToString()); } return null; }
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; }
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()); } }
private void button1_Click(object sender, EventArgs e) { //bool[] data = new bool[9]; //data[0] = true; //data[1] = true; //data[2] = false; //data[3] = true; //data[4] = true; //data[5] = false; //data[6] = false; //data[7] = true; //data[8] = true; //FrameData frm = new FrameData(); //BitArray btarray = new BitArray(data); //for (int i = 0; i < btarray.Length; i++) //{ // Console.WriteLine(btarray[i]); //} //Console.WriteLine("fsdfs"); //byte[] databyte = frm.ToByteArray(btarray); //BitArray bt = new BitArray(databyte); //for (int i = 0; i < bt.Length; i++) //{ // Console.WriteLine(bt[i]); //} ImageSetting imgSetting = new ImageSetting(320, 240, 8, 8); byte[] imgByte = imgSetting.toByte(); ImageSetting imgSetting1 = new ImageSetting(imgByte); Console.WriteLine("Height : " + imgSetting1.Height + "\nWidth : " + imgSetting1.Width + "\nblock : " + imgSetting1.BlockSize + "\nColorBIts : " + imgSetting1.ColorBits); int rowDataNo = imgSetting.Height / imgSetting.BlockSize; Console.WriteLine("Row No :" + rowDataNo); bool[] rowChangeBits = new bool[rowDataNo]; for (int i = 0; i < rowDataNo; i++) { rowChangeBits[i] = true; } int colNo = imgSetting.Width / imgSetting.BlockSize; bool[] colChangeBits = new bool[colNo * rowDataNo]; int count = 0; Console.WriteLine("total column change bits no : " + rowDataNo * colNo); for (int j = 0; j < rowDataNo; j++) { for (int k = 0; k < colNo; k++) { colChangeBits[count] = true; count++; } } int totalchange = rowDataNo * colNo; List<byte> RPixel = new List<byte>(); List<byte> GPixel = new List<byte>(); List<byte> BPixel = new List<byte>(); char R = 'R'; char G = 'G'; char B = 'B'; for (int i = 0; i < totalchange; i++) { RPixel.Add((byte)R); GPixel.Add((byte)G); BPixel.Add((byte)B); } FrameData frmData = new FrameData(rowChangeBits, colChangeBits, RPixel, GPixel, BPixel); byte[] frmByte = frmData.toBytes(); FrameData frmData1 = new FrameData(frmByte, imgSetting); int c = 0; Console.WriteLine("Row Change Bits : " + rowChangeBits.Length + "------" + frmData1.rowChangeBits.Length); for (int i = 0; i < rowDataNo; i++) { Console.WriteLine(i + "-" + frmData1.rowChangeBits[i]); if (frmData1.rowChangeBits[i]) c++; } count = 0; Console.WriteLine("Column Change Bits : " + colChangeBits.Length + "----" + frmData1.columnChangeBits.Length + "true data : " + c); for (int i = 0; i < c; i++) { for (int j = 0; j < colNo; j++) { Console.WriteLine(frmData1.columnChangeBits[count]); count++; } } for (int i = 0; i < colNo * c; i++) { Console.WriteLine((char)frmData1.RPixels[i]); Console.WriteLine((char)frmData1.GPixels[i]); Console.WriteLine((char)frmData1.BPixels[i]); } Console.WriteLine("No of R = " + colNo * c); }