其他分享
首页 > 其他分享> > 我可以使用没有这些伪像的graphics.RotateTransform()吗?

我可以使用没有这些伪像的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