问题描述
|
我将
PictureEdit
(DevExpress控件)用作某种形式的子级。我正在尝试使用MouseEventArgs
坐标属性在加载的图像上绘制像素。
private void PictureEditorOnMouseMove(Object sender,MouseEventArgs e)
{
if(e.Button == MouseButtons.Left)
{
(this.pictureEditor.Image as Bitmap).SetPixel(e.X,e.Y,this.colorPicker.Color);
}
}
发生ArgumentOutOfRangeException的原因是,传递给SetPixel方法的x
(或y
)参数不是正数&&大于给定位图的Height
属性。
我当时以为我使用的坐标是bitmap.Width
和bitmap.Height
。
如何绑定它们?还是我做错了什么?
谢谢!
解决方法
尝试这个:
private void PictureEditorOnMouseMove(Object sender,MouseEventArgs e)
{
if(e.Button == MouseButtons.Left)
{
PictureEdit pce = sender as PictureEdit;
Bitmap bmpImage = pce.Image as Bitmap;
PictureEditViewInfo viewInfo = pce.GetViewInfo() as PictureEditViewInfo;
var p = new Point(
(e.Location.X - viewInfo.PictureStartX) * bmpImage.Width / viewInfo.PictureRect.Width,(e.Location.Y - viewInfo.PictureStartY) * bmpImage.Height / viewInfo.PictureRect.Height);
if (p.X >= 0 && p.X < bmpImage.Width && p.Y >= 0 && p.Y < bmpImage.Height)
{
bmpImage.SetPixel(p.X,p.Y,this.colorPicker.Color);
}
else
{
Console.WriteLine(\"Out bounds\");
}
}
}
请注意,您需要考虑到PictureEdit的SizeMode,将鼠标位置转换为Bitmap的近似像素位置。在示例代码中创建新点时,将完成此操作。