这是 .NET 4 中 RotateFlipType
枚举的声明:
public enum RotateFlipType
{
Rotate180FlipXY = 0,
RotateNoneFlipNone = 0,
Rotate270FlipXY = 1,
Rotate90FlipNone = 1,
Rotate180FlipNone = 2,
RotateNoneFlipXY = 2,
Rotate270FlipNone = 3,
Rotate90FlipXY = 3,
Rotate180FlipY = 4,
RotateNoneFlipX = 4,
Rotate90FlipX = 5,
Rotate270FlipY = 5,
RotateNoneFlipY = 6,
Rotate180FlipX = 6,
Rotate90FlipY = 7,
Rotate270FlipX = 7,
}
我了解如何将这些值配对在一起以进行操作,否则会产生相同的结果。将调试器值与 RotateFlipType.ToString
值进行比较时,上述枚举变得不友好。也不适合数据绑定(bind)场景。例如:
var value = RotateFlipType.RotateNoneFlipNone; // Debugger shows correct string for [value] which is [RotateNoneFlipNone].
var text = value.ToString(); // Output of [text] is [Rotate180FlipXY]. Presumably because it is declared first in the list.
这与操作顺序有什么关系吗?难道他们没有使用 [Flags]
或将枚举一分为二(将 Rotation 和 Flipping 分开)?
最佳答案
我意识到那匹马早就不见了,不需要关上谷仓门,但是......
在此模式中选择这些常量是为了使图像反射更容易。
要水平翻转,可以使用这个简单的操作:
rotation_value ^= 4;
垂直翻转:
rotation_value ^= 6;
同时翻转两者(旋转 180 度):
rotation_value ^= 2;
关于c# - 为什么 RotateFlipType 枚举的实现方式不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32810018/