微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

无法在位图上绘制

如何解决无法在位图上绘制

| 我将
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的近似像素位置。在示例代码中创建新点时,将完成此操作。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。