Обработка отказа: Когда одна машина перестала работать, другая машина (обычно в том же месте) вступает во владение и возобновляет сервис
Аварийное восстановление: Когда Годзилла уничтожает Ваш дата-центр, у Вас действительно есть альтернативные местоположения, чтобы продолжать предоставлять Вашу услугу и протоколы/средства для другого местоположения, чтобы знать, как продолжать предоставлять услугу
В зависимости от конкретных потребностей каждого сервиса, аварийное восстановление могло бы просто быть лентой для резервного копирования в сейфе в другом месте. Другими словами, это просто имеет определенный протокол для восстановления с бедствия. Аналогично, обработка отказа могла бы просто иметь запасную резервную машину, которая заставляет Вас перейти к дата-центру для нее для принятия места неудавшегося, то есть, имея определенный протокол о том, что сделать в случае аппаратного сбоя.
Подведение итогов, обработка отказа отвечает на вопрос, 'что я делаю в случае, если единственная машина перестала работать?', отвечает аварийное восстановление, 'что я делаю в случае, если бедствие происходит (огонь, лавинные рассылки, война, ISP обанкротился, безотносительно)?'
Image myImage = Image.FromFile("myimage.png");
myImage.RotateFlip(RotateFlipType.Rotate180FlipNone);
http://msdn.microsoft.com/en-us/library/system.drawing.image.rotateflip.aspx
Вот пример кода (написанный не мной - найденный некоторое время назад здесь ), который работал у меня, если вы отредактируете некоторые детали.
private Bitmap rotateImage(Bitmap b, float angle)
{
//create a new empty bitmap to hold rotated image
Bitmap returnBitmap = new Bitmap(b.Width, b.Height);
//make a graphics object from the empty bitmap
using (Graphics g = Graphics.FromImage(returnBitmap))
{
//move rotation point to center of image
g.TranslateTransform((float)b.Width / 2, (float)b.Height / 2);
//rotate
g.RotateTransform(angle);
//move image back
g.TranslateTransform(-(float)b.Width / 2, -(float)b.Height / 2);
//draw passed in image onto graphics object
g.DrawImage(b, new Point(0, 0));
}
return returnBitmap;
}
Пожалуйста Обратите внимание, что это может не работать "из коробки" - есть некоторые проблемы с новым растровым изображением. Когда вы его поворачиваете, он может не поместиться в прямоугольнике старого растрового изображения (границы прямоугольника b.Width, B.Height).
В любом случае, это просто чтобы дать вам представление. Если вы выберете этот способ, я уверен, что вы сможете проработать все детали. Я бы отправил свой последний код, но сейчас его нет при мне ...