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()); } }
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; }
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 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()); } }