精华内容
下载资源
问答
  • 视频在播放过程中如果是绘制矩形边框到视频界面那么视频播放的时候会冲掉边框,所以需要每播放一次画面更新一下边框,这样就增加了额外性能开销,所以此方法不推荐使用(图形本身比较流畅,但因为加了边框之后看起来...

    视频在播放过程中如果是绘制矩形边框到视频界面那么视频播放的时候会冲掉边框,所以需要每播放一次画面更新一下边框,这样就增加了额外性能开销,所以此方法不推荐使用(图形本身比较流畅,但因为加了边框之后看起来是在抖动的)。于是后来想着通过线条绘制窗口来实现边框,但是比较复杂,每个图形的边界和位置都需要计算,而且实现过程中相同的算法出现了线条模糊的情况。最终,选择调整内部视频的大小来允许绘制一个边框,这种方式只需要对多个视频进行重新布局就可以了。

     


    目录

    需求

    设计边框

    线条绘制模型

    内嵌布局模型

    成品验收

    绘图代码


     

    需求

    选中视频边框标识显示:添加边框效果。

    设计边框

    线条绘制模型

    内嵌布局模型

    成品验收

    可以看到视频播放边框也不会抖动,因为边框做到了与播放器无关。

    绘图代码

    这个比较简单

     #region 绘制视频选中区域边框    
            /// <summary>
            /// 矩形对象
            /// </summary>
            Rectangle rect = new Rectangle();
            /// <summary>
            /// 画图颜色
            /// </summary>
            static Color GreenColor = Color.FromArgb(60, 255, 60);
            static Color RedColor = Color.FromArgb(255, 60, 60);
            static Color BlackColor = Color.FromArgb(105, 105, 105);
            static Color WhiteColor = Color.FromArgb(255, 255, 255);
            /// <summary>
            /// 画图画笔
            /// </summary>
            Pen GreenPen = new Pen(GreenColor);
            Pen RedPen = new Pen(RedColor);
            Pen BlackPen = new Pen(BlackColor);
            Pen WhitePen = new Pen(WhiteColor);
            /// <summary>
            /// 绘制播放视频控件边框(1:绿色,2:红色,3:黑色,4:白色)
            /// </summary>
            /// <param name="x"></param>
            /// <param name="y"></param>
            /// <param name="width"></param>
            /// <param name="height"></param>
            /// <param name="color">1:绿色,2:红色,3:黑色,4:白色</param>
            public void DrawVideoBorder(int x,int y,int width,int height,int color)
            {
                // 画图对象需要每次都创建,类似初始化一个不同的画布,否则出现矩形不完整情况
                Graphics graphics = this.CreateGraphics();
    
                lock (graphics)
                {
                    rect.X = x;
                    rect.Y = y;
                    rect.Width = width;
                    rect.Height = height;
                    rect.Location = new Point(rect.X, rect.Y);
    
                    Pen pen = null;// 当前需要的画笔颜色
                    switch (color)
                    {
                        case 1:
                            pen = GreenPen;
                            break;
                        case 2:
                            pen = RedPen;
                            break;
                        case 3:
                            pen = BlackPen;
                            break;
                        case 4:
                            pen = WhitePen;
                            break;
                    }
                    graphics.DrawRectangle(pen, rect);
                }
                
            }

    只需要布局重绘一次内部视频控件就OK。代码逻辑如下:

     /// <summary>
            /// 布局视频:支持分屏数量(1、4、6、9、10、16)
            /// </summary>
            /// <returns></returns>
            public void LayoutUCVideosForBorder(int num)
            {
                var selectedIndex = this.SelectedIndex;
                // 重新布局视频
                LayoutUCVideos(screenNumber);
                // 重新设置选中的窗口ID
                this.SelectedIndex = selectedIndex;
                // 画矩形边框
                for (var i = 0; i < this.Controls.Count; i++)
                {
                    UCVideo video = this.Controls[i] as UCVideo;
                    if (this.SelectedIndex == video.Id)
                    {
                        // 允许播放SDL背景框
                        video.DrawSDLBorder(true);
                        // 被选中窗口播放SDL音频
                        video.OpenSDLAudio(SDL_AUDIO_OBJECT);
                        // 选中状态标识
                        video.IsSelected = true;
    
                        // 缩小视频窗口并画边框
                        video.Width = video.Width - 2;
                        video.Height = video.Height - 2;
                        video.Location = new Point(video.X + 1, video.Y + 1);
                        DrawVideoBorder(video.X, video.Y, video.Width + 1, video.Height + 1, 1);
                        break;
                    }
                }
            }

    上面方法是放在控件单击事件处理的。

    展开全文
  • 用于FPS游戏的外部菜单绘制,做游戏辅助开发的可以学习参考!
  • cvDrawContours 在图像上绘制外部和内部轮廓
                   

    转自:http://www.aiseminar.cn/html/18/t-618.html?action-uchimage

     

    函数cvDrawContours用于在图像上绘制外部和内部轮廓。当thickness >= 0 时,绘制轮廓线;否则填充由轮廓包围的部分。

    void cvDrawContours( CvArr *img, CvSeq* contour,
                         CvScalar external_color, CvScalar hole_color,
                         int max_level, int thickness=1,
                         int line_type=8, CvPoint offset=cvPoint(0,0) );

    img
    要在其上绘制轮廓的图像。和在其他绘图函数里一样,轮廓是ROI的修剪结果。

    contour
    指向第一个轮廓的指针。

    external_color
    外轮廓的颜色。

    hole_color
    内轮廓的颜色。

    max_level
    画轮廓的最大层数。如果是0,只绘制contour;如果是1,将绘制contour后和contour同层的所有轮廓;如果是2,绘制contour后所有同层和低一层的轮廓,以此类推;如果值是负值,则函数并不绘制contour后的轮廓,但是将画出其子轮廓,一直到abs(max_level) - 1层。

    thickness
    绘制轮廓线的宽度。如果为负值(例如,等于CV_FILLED),则contour内部将被绘制。

    line_type
    轮廓线段的类型,具体查看cvLine的描述。

    offset
    按给定值移动所有点的坐标。

               

    再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

    展开全文
  • 转自:... 函数cvDrawContours用于在图像上绘制外部和内部轮廓。当thickness >= 0 时,绘制轮廓线;否则填充由轮廓包围的部分。 void cvDrawContours( CvArr *img, CvSeq* contour, ...

    转自:http://www.aiseminar.cn/html/18/t-618.html?action-uchimage

     

    函数cvDrawContours用于在图像上绘制外部和内部轮廓。当thickness >= 0 时,绘制轮廓线;否则填充由轮廓包围的部分。

    void cvDrawContours( CvArr *img, CvSeq* contour,
                         CvScalar external_color, CvScalar hole_color,
                         int max_level, int thickness=1,
                         int line_type=8, CvPoint offset=cvPoint(0,0) );

    img
    要在其上绘制轮廓的图像。和在其他绘图函数里一样,轮廓是ROI的修剪结果。

    contour
    指向第一个轮廓的指针。

    external_color
    外轮廓的颜色。

    hole_color
    内轮廓的颜色。

    max_level
    画轮廓的最大层数。如果是0,只绘制contour;如果是1,将绘制contour后和contour同层的所有轮廓;如果是2,绘制contour后所有同层和低一层的轮廓,以此类推;如果值是负值,则函数并不绘制contour后的轮廓,但是将画出其子轮廓,一直到abs(max_level) - 1层。

    thickness
    绘制轮廓线的宽度。如果为负值(例如,等于CV_FILLED),则contour内部将被绘制。

    line_type
    轮廓线段的类型,具体查看cvLine的描述。

    offset
    按给定值移动所有点的坐标。

    展开全文
  • “小白,canvas绘制图形功能自己看了么?”“看了,我自己画了些圆和线条,还绘制了问题,不过感觉没什么实用价值。”“这些功能对于做图表还是很有用的,了解一下就可以了,我们今天聊聊canvas在web前端应用中最...

    “小白,canvas绘制图形功能自己看了么?”

    “看了,我自己画了些圆和线条,还绘制了问题,不过感觉没什么实用价值。”

    “这些功能对于做图表还是很有用的,了解一下就可以了,我们今天聊聊canvas在web前端应用中最常用的一个功能——重绘外部图片。”

    “外部图片直接插入到网页上不行么?为什么要在canvas中重绘呢?”

    老朱说:“假如用户上传头像的时候图片格式特别大,我们就可以把头像先在canvas中重绘一下,然后再把重绘好的图片发送到服务器进行保存,这样用户以后使用头像的时候,图片格式就非常小了。从今天开始我们实现一下图片上传的功能,你先创建一个空的html文件,然后插入一个canvas标签。”

    小白很快便布局好了,说道:“好了,我还用css控制了canvas的宽度和高度!”

    老朱看完以后说道:“在javascript中有一个Image类,他是用来对图片进行操作的类,我们可以通过实例化一个Image对象来做一些图片的操作,比如:”

    “这段代码实例化了一个img图片对象,通过img的路径(src)属性可是设置图片的路径。在canvas中绘制图片用到的是drawImage(img,sx,sy,swidth,sheight,x,y,width,height)方法,这里第一个参数就是图片对象,sx和sy是裁剪的位置,swidth和sheight是要使用的图片对象的宽度和高度,x和y是图片在canvas中的坐标位置,width和height是最终显示的图片的宽和高。它还有一个重载方法是drawImage(img,x,y),这个方法只考虑图片对象和x轴y轴。”

    小白有点不明白,说道:“感觉有点晕啊!”

    老朱:“没关系,我们通过一个实例看看怎么绘制图片。”

    “我现在使用了三个参数进行绘制,第一个参数是img对象,第二个参数是图片距离canvas左端的距离,第三个参数是图片距离顶端的距离。如果希望图片从左上角开始重绘,我们可以把后两个参数都设置为0。”

    小白说:“怎样才能让图片跟canvas高度和宽度一致呢?”

    老朱:“这里我们就需要使用drawImage(img,sx,sy,swidth,sheight,x,y,width,height)方法了,可以看出sx、sy、x、y都应该取0值。width和height应该跟canvas宽度高度一致。关键是swidth和sheight的值。”

    小白:“按照字面意思理解,这里是要使用的图片的高度和宽度,那应该是取图片的原始宽度和高度吧!”

    老朱:“恩,是的,要拿到它的原始高度和宽度,可以通过Image对象的width和height属性获取,不过直接取会有问题,你可以先看一下直接取的问题。”

    小白:“为什么取不上呢?”

    老朱:“当img的src属性指向对应地址以后,浏览器无法瞬间拿到图片的宽度和高度,我们需要等图片加载完成以后才能获取(除非图片加载过并且在缓存中才能取到),所以保险起见我们需要使用当图片加载完成(onload)的方法。”

    “这样无论是不是首次加载图片,都可以拿到图片原始宽度和高度了,最后我们在onload方法中重绘图片就可以了。”

    小白:“感觉还是不对啊,图片比例有问题!”

    老朱:“这正是我们要说的图片重绘很重要的一个问题,通过css控制canvas宽度和高度之后,canvas只是按比例进行了变化,也就是说canvas其实是变形的。现在把canvas的css宽度和高度去掉看一下效果。”

    “他的默认宽度和高度是300×150像素,所以我们对canvas进行宽度高度控制的时候最好在canvas属性上直接设定宽度和高度。”

    “这样就没有问题了!在实际使用的时候位图重绘可能有很多需求,你需要根据需求设定对应的绘制参数,我希望你能把drawImage参数做不同变化进行测试。主要做下面三个功能的练习”

    1、图片裁剪;

    2、绘制到canvas指定位置,如右下角;

    3、如何通过jQuery动态更改canvas宽度和高度(通过attr更改canvas属性)后,还能正确重绘图片。


    想学H5的朋友可以关注老炉,您的关注是我持续更新《小白HTML5成长之路》的动力!

    展开全文
  • 场景需求:想做一个能根据外部数据动态更新的仪表盘,作为窗体的子控件显示。因现在没有外部数据,所以用了一个滑动条来替代外部数据,演示动态效果。所需效果: 重载QLabel为pgxtlabel,新建pgxtlabel,继承...
  • FPS之游戏绘制(六)

    2020-05-10 16:17:43
    1.GDI外部绘制 这种绘制方式最为常见,游戏也不容易检测出,创建GDI设备在指定的窗口句柄上绘制,占用CPU很小,但是绘制到游戏里面会闪烁,原因是游戏FPS刷新频率与gdi绘制频率不同导致画出的方框会闪烁。...
  • 其他格式出现失败
  • Android ImageView加载圆形图片且同时绘制圆形图片的外部边缘边线及边框 在Android早期的开发中,如果涉及到圆形图片的处理,往往需要借助于第三方的实现,见附录文章1,2。Android本身并未从SDK层面支持圆形图...
  • 绘制每个月收到的服饰   // painter.setBrush(Qt::BDiagPattern);   // for (int i = 0; i (); ++i) {   // painter.setPen(Qt::black);   // int fineryCount = yearList.at(i); /...
  • 功能描述:基于GDI PLUS实现外部图像文件绘制窗口图像基于GDI PLUS实现外部图像文件设置窗口图像基于GDI PLUS生成图像句柄接口函数:DrawWindowImageSetWindowImageDrawDlgItemImageSetDlgItemImageLoadImageEx下载...
  • Android View加载圆形图片且同时绘制圆形图片的外部边缘边线及边框:LayerDrawable实现 LayerDrawable实现的结果和附录文章1,2,3中的layer-list一致。我写个例子,这次使用LayerDrawable把附录文章4的功能再次实现...
  • ylabel('Iq(A)') zlabel('Ldd(mH)') subplot(122) surf(x,y,z) //绘制图像为填充网格曲面 xlabel('Id(A)'); ylabel('Iq(A)') zlabel('Ldd(mH)') 运行程序,结果如下: 补充:meshgrid(x,y)网格配置函数x,y的范围...
  • //折线绘制函数 while ( Counter < ( xList .size()- 1 )) { painter.setPen(pen); painter.drawLine( 2 * xList .value( Counter )+ 25 , 205 - yDrawList .value( Counter )* 2 , 2 * xList ....
  • 绘制每个月收到的服饰   // painter.setBrush(Qt::BDiagPattern);   // for (int i = 0; i (); ++i) {   // painter.setPen(Qt::black);   // int fineryCount = yearList.at(i); ...
  • 效果如下: 示例代码(非上方图片源码): var imgPath = plus.io.convertLocalFileSystemURL("_www/static/img/xxx.jpg");... //绘制文字 canvas.save(Canvas.ALL_SAVE_FLAG); canvas.restore() } });
  • GUI_DrawStreamedBitmapExAuto()本身并不能从外部存储器获取位图数据,而是通过一个用户自定义的GetData函数将要显示的位图数据从外部存储器读出来,指针就指向这个GetData函数;GUI_DrawStreamedBitmapExAuto()会多...
  • 1.绘制需引入外部插件WPFVisifire.Charts插件 2.首先来三个button按钮 <Canvas> <Button Content="柱状图" Name="ButColumn" HorizontalAlignment="Left" Margin="10,59,0,0" VerticalAlignment="Top" ...
  • 对话框程序,想在对话框外部 ,在屏幕绘制矩形却不显示,为什么呢? void CDlgTester::OnLButtonDown(UINT nFlags, CPoint point) { // TODO: 在此添加消息处理程序代码和/或调用默认值 CDC* hDC ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,223
精华内容 489
关键字:

外部绘制