Oto przykładowy kod (nie napisany przeze mnie - znaleziono jakiś czas temu here), który pracował dla mnie, tak długo, jak edytować kilka szczegółów.
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;
}
Należy pamiętać, że to może nie działać "po wyjęciu z pudełka" - w nowej bitmapie występują pewne problemy. Po obróceniu go może on nie pasować wygodnie w prostokącie starej bitmapy (prostokąty b.Width, B.Height).
W każdym razie to tylko pomysł. Jeśli zdecydujesz się to zrobić w ten sposób, jestem pewien, że będziesz w stanie opracować wszystkie szczegóły. Chciałbym pisać mój ostateczny kod, jednak nie mam go na mnie teraz ...
obrót Matrix jest prawo sposób arbitralnej rotacji. Najlepszym sposobem jest pokazać, co próbujesz, więc możemy to naprawić ... – Guffa