我可以使用没有这些伪像的graphics.RotateTransform()吗?
作者:互联网
我正在实现此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);
不幸的是,像这样旋转位图实际上会产生以下结果:
请注意出现在中心两侧的文物.
我使用错误的方法吗?还是有办法摆脱这些讨厌的裂痕?
解决方法:
查看该Microsoft示例中的源代码,我通过添加矩阵并设置RotateAt方法对UpdateDisplay方法进行了以下更改.
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%地确定这是答案(但是评论太久了),所以这可能很有用.
标签:graphics,rotation,bitmap,gdi-2,c 来源: https://codeday.me/bug/20191201/2083407.html