我正在实现一个颜色选择器组件,如seminal article中所述。
正如您所看到的,我已经对基础知识进行了分类:
然而,其中一个要求是能够使色轮旋转任意量。认为这很容易,我对鼠标位置有一些算术 - >颜色值代码和以下代码实际绘制轮子的位:
newGraphics.TranslateTransform((float)this.Radius, (float)this.Radius);
newGraphics.RotateTransform((float)this.offset);
newGraphics.TranslateTransform((float)this.Radius * -1, (float)this.Radius * -1);
不幸的是,像这样旋转位图实际上产生了这个:
请注意出现在中心两侧的人工制品。
我使用了错误的方法吗?还是有办法摆脱这些令人讨厌的裂缝?
答案 0 :(得分:3)
查看该Microsoft示例的源代码,我通过添加矩阵并设置UpdateDisplay
方法对RotateAt
方法进行了以下更改。
private void UpdateDisplay() {
// Update the gradients, and place the
// pointers correctly based on colors and
// brightness.
using (Brush selectedBrush = new SolidBrush(selectedColor)) {
using (Matrix m = new Matrix()) {
m.RotateAt(35f, centerPoint);
g.Transform = m;
// Draw the saved color wheel image.
g.DrawImage(colorImage, colorRectangle);
g.ResetTransform();
}
// Draw the "selected color" rectangle.
g.FillRectangle(selectedBrush, selectedColorRectangle);
// Draw the "brightness" rectangle.
DrawLinearGradient(fullColor);
// Draw the two pointers.
DrawColorPointer(colorPoint);
DrawBrightnessPointer(brightnessPoint);
}
}
它将车轮旋转了35度(尽管现在已经关闭了颜色选择,因为我没有弄乱所有代码,所以35度,并且它没有产生任何撕裂。
不是100%肯定这是答案(但评论时间太长),所以这可能会有所帮助。