B
Btb4198
Guest
I am using videoSourcePlayer from AForge. now I had to add a function to it because GetCurrentVideoFrame( ) was not working the why I needed. So I make a function called GetCurrent() and it work the way I wanted. The problem I am having is when I used it in place of GetCurrentVideoFrame( ) I get a System.OutOfMemoryException: 'Out of memory.' Exception and I have no Ideal why. here is my code :
Bitmap getPic2(int i2)
{
Bitmap bmp = null;
Bitmap tempB = null;
if (endIRList[i2].X > videoSourcePlayer.Width - 1)
endIRList[i2]= new System.Drawing.Point(videoSourcePlayer.Width - 1, endIRList[i2].Y);
if (endIRList[i2].Y > videoSourcePlayer.Height - 1)
endIRList[i2] = new System.Drawing.Point(endIRList[i2].X, videoSourcePlayer.Height - 1);
if (stIRList[i2].X >= 0 && stIRList[i2].Y >= 0 && endIRList[i2].X < videoSourcePlayer.Width && endIRList[i2].Y < videoSourcePlayer.Height)
{
if (endIRList[i2].X - stIRList[i2].X > 0 && endIRList[i2].Y - stIRList[i2].Y > 0)
{
bmp = videoSourcePlayer.GetCurrent();
System.Drawing.Image iOld = p2.Image;
tempB = bmp.Clone(new Rectangle(stIRList[i2].X, stIRList[i2].Y, endIRList[i2].X - stIRList[i2].X, endIRList[i2].Y - stIRList[i2].Y),bmp.PixelFormat);
if (iOld != null)
{
iOld.Dispose();
iOld = null;
}
}
}
pictureBox1.Image =this.videoSourcePlayer.GetCurrent();
TestPicBox.Image = tempB;
return tempB;
}
the problem I am having is at:
tempB = bmp.Clone(new Rectangle(stIRList[i2].X, stIRList[i2].Y, endIRList[i2].X - stIRList[i2].X, endIRList[i2].Y - stIRList[i2].Y),bmp.PixelFormat);
now if I just use bmp = GetCurrentVideoFrame I do not get the problem. so something most be wrong with my function GetCurrentVideo
here is the code :
public Bitmap GetCurrentVideoFrame( )
{
lock ( sync )
{
return ( currentFrame == null ) ? null : AForge.Imaging.Image.Clone( currentFrame );
}
}
public Bitmap GetCurrent()
{
lock (sync)
{
Bitmap original = GetCurrentVideoFrame();
currentPic = new Bitmap(original, new Size(original.Width / 2, original.Height / 2));
original.Dispose();
original = null;
return currentPic;
}
}
I just cant see why their function works and my does not. can anyone help?
Continue reading...
Bitmap getPic2(int i2)
{
Bitmap bmp = null;
Bitmap tempB = null;
if (endIRList[i2].X > videoSourcePlayer.Width - 1)
endIRList[i2]= new System.Drawing.Point(videoSourcePlayer.Width - 1, endIRList[i2].Y);
if (endIRList[i2].Y > videoSourcePlayer.Height - 1)
endIRList[i2] = new System.Drawing.Point(endIRList[i2].X, videoSourcePlayer.Height - 1);
if (stIRList[i2].X >= 0 && stIRList[i2].Y >= 0 && endIRList[i2].X < videoSourcePlayer.Width && endIRList[i2].Y < videoSourcePlayer.Height)
{
if (endIRList[i2].X - stIRList[i2].X > 0 && endIRList[i2].Y - stIRList[i2].Y > 0)
{
bmp = videoSourcePlayer.GetCurrent();
System.Drawing.Image iOld = p2.Image;
tempB = bmp.Clone(new Rectangle(stIRList[i2].X, stIRList[i2].Y, endIRList[i2].X - stIRList[i2].X, endIRList[i2].Y - stIRList[i2].Y),bmp.PixelFormat);
if (iOld != null)
{
iOld.Dispose();
iOld = null;
}
}
}
pictureBox1.Image =this.videoSourcePlayer.GetCurrent();
TestPicBox.Image = tempB;
return tempB;
}
the problem I am having is at:
tempB = bmp.Clone(new Rectangle(stIRList[i2].X, stIRList[i2].Y, endIRList[i2].X - stIRList[i2].X, endIRList[i2].Y - stIRList[i2].Y),bmp.PixelFormat);
now if I just use bmp = GetCurrentVideoFrame I do not get the problem. so something most be wrong with my function GetCurrentVideo
here is the code :
public Bitmap GetCurrentVideoFrame( )
{
lock ( sync )
{
return ( currentFrame == null ) ? null : AForge.Imaging.Image.Clone( currentFrame );
}
}
public Bitmap GetCurrent()
{
lock (sync)
{
Bitmap original = GetCurrentVideoFrame();
currentPic = new Bitmap(original, new Size(original.Width / 2, original.Height / 2));
original.Dispose();
original = null;
return currentPic;
}
}
I just cant see why their function works and my does not. can anyone help?
Continue reading...