protected virtual void DrawImage(Graphics g)
{
InterpolationMode currentInterpolationMode;
PixelOffsetMode currentPixelOffsetMode;
currentInterpolationMode = g.InterpolationMode;
currentPixelOffsetMode = g.PixelOffsetMode;
g.InterpolationMode = GetInterpolationMode();
// disable pixel offsets. Thanks to Rotem for the info.
// http://stackoverflow.com/questions/14070311/why-is-graphics-drawimage-cropping-part-of-my-image/14070372#14070372
g.PixelOffsetMode = PixelOffsetMode.HighQuality;
try
{
// Animation. Thanks to teamalpha5441 for the contribution
if (IsAnimating && !DesignMode)
{
ImageAnimator.UpdateFrames(Image);
}
g.DrawImage(Image, GetImageViewPort(), GetSourceImageRegion(), GraphicsUnit.Pixel);
}
catch (ArgumentException)
{
// ignore errors that occur due to the image being disposed
}
catch (OutOfMemoryException)
{
// also ignore errors that occur due to running out of memory
}
catch (ExternalException)
{
// stop the animation and reset to the first frame.
IsAnimating = false;
ImageAnimator.StopAnimate(Image, OnFrameChangedHandler);
}
g.PixelOffsetMode = currentPixelOffsetMode;
g.InterpolationMode = currentInterpolationMode;
}