c# - 为什么 RotateFlipType 枚举的实现方式不同?

标签 c# .net winforms enums

这是 .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/

相关文章:

c# - 我们如何在 C# 中获取磁盘性能信息

c# - 为另一个 Controller 类调用 Controller 类 public Void 方法

c# - .Net MVC3 自定义模型绑定(bind)器 - 初始加载模型

C# RegEx 同时匹配字符串开头和单词开头

c# - WinForms 中的模型 View 展示器

c# - 处理Control +在C#中输入多行文本框

c# - 避免 .NET Core 中 n 层架构的循环依赖

c# - Linq 返回一个字段或另一个

c# - 为什么在尝试删除文件时会出现参数异常?

.net - 如何增加asp.net中web服务的超时时间?