精华内容
下载资源
问答
  • <canvas id="myCanvas" width="1000" height="580" style="border:1px solid #d3d3d3;"> ...</canvas> function initCanvas(){ var canvas = document.getElementById("myCanvas");...
    <canvas id="myCanvas" width="1000" height="580" style="border:1px solid #d3d3d3;">
            您的浏览器不支持 HTML5 canvas 标签。</canvas>
    function initCanvas(){
                var canvas = document.getElementById("myCanvas");
                var ctx=canvas.getContext("2d");
                var point1 = new Object(),point2 = new Object()
                    ,point3 = new Object(),point4 = new Object();
                point1.x = 150; point1.y = 0;
                point2.x = 450; point2.y = 0;
                point3.x = 150; point3.y = 50;
                point4.x = 450; point4.y = 50;
                drawCanvas(ctx,point1,point2,point3,point4,'ABC')
            }
            function drawCanvas(ctx,point1,point2,point3,point4,name){
                ctx.beginPath();
                ctx.moveTo(point1.x, point1.y);
                ctx.lineTo(point2.x, point2.y);
                ctx.lineTo(point4.x, point4.y);
                ctx.lineTo(point3.x, point3.y);
                ctx.closePath();ctx.stroke();
                if(name){
                    ctx.fillText(name, point1.x, point1.y + 18);
                }
            }

     

    展开全文
  • C# 图片画矩形添加文字

    千次阅读 2019-12-11 18:10:51
    矩形文字(可多次画画) // draw icon grapPic.DrawRectangle(pen, posIcon.X, posIcon.Y, posIcon.Width, posIcon.Height); // draw text string text = icon.DeviceName; // 下面定义一个矩形区域...

     1.初始设置字体与笔

                Pen pen = new Pen(Color.FromArgb(220, Color.Green), 5);
                Font font = new Font("微软雅黑", fontSize, FontStyle.Bold); // 定义字体
                Brush whiteBrush = new SolidBrush(Color.FromArgb(220, Color.Red)); // 画文字用

     2.初始设置图片和Graphics (可循环2-4)

                        // pic draw
                        Bitmap picBitmap = new Bitmap(fi.FullName);
                        Graphics grapPic = Graphics.FromImage(picBitmap);

     3.画矩形和文字(可多次画画)

                            // draw icon
                            grapPic.DrawRectangle(pen, posIcon.X, posIcon.Y, posIcon.Width, posIcon.Height);
    
                            // draw text
                            string text = icon.DeviceName;
    
                            // 下面定义一个矩形区域
                            float rectWidth = text.Length * (fontSize + 10);
                            float rectHeight = fontSize + 10;
    
                            // 声明矩形域
                            RectangleF textArea = new RectangleF(posIcon.X + posIcon.Width, posIcon.Y, rectWidth, rectHeight);
                            grapPic.DrawString(text, font, whiteBrush, textArea);

    4.dispose Graphics 与图片

                        // dispose pic
                        grapPic.Dispose();
                        picBitmap.Dispose();

    5.dispose 笔与字体

                pen.Dispose();
                whiteBrush.Dispose();
                font.Dispose();

     

    展开全文
  • 首先我们通过上面代码canvas绘制出一个圆角的矩形。说到这里就要提一句,canvas.drawRoundRect()有两个不同参的函数,因为博主的项目中需要兼容较低的android系统版本,所以采用上面比较通用的绘制圆角矩形的API...

    前言

    先来闲聊一下写这个题目的原因吧,其实这个知识点对于大神来说其实是很简单的,所以如果大神看到这里的话,其实就可以不用看下去了。至于如果是新手,或者说跟本人一样,对于canvas的操作还有疑惑的朋友,希望你可以从这篇文章中得到你想要的答案,同时可以解决你的问题。
    其实这个文章源自于最近项目需要重构,不得不说,作为一个迈过十年时光的项目来说,要进行重构还是比较烦恼的,至于这个烦恼的原因吧,不用多说,大家也应该知道在产品X闲着没事,正在为自己的KPI而担心的时候,总想搞点事情,这也是无可厚非,尤其是一个菜鸟产品X急切需要表现的时候。当然了,话虽这么说,但是能够为这个有十年光景的项目进行一次重构,心里还是有点小激动的,毕竟能够吸收前人的思想,同时自己又可以在项目中大展身手,对自己来说也是好的。
    那么我就来说说这个需求吧,因为我们应用是小说阅读器,所以自然阅读页上面肯定是重中之重,而这一块在性能上的要求无疑也是比较高的,如果单纯使用各种View的组合成为一个新的View,明显这样也是可以的,但是这样的性能必然不是很好,因为这里涉及到多层View的嵌套操作,同时对视图的过度渲染也会导致卡慢等的情况出现,所以最好的方式我们最好还是通过在canvas进行操作了。当然这里我给出的只是canvas操作中的一个我遇到问题时的操作,这些问题可能在大牛看来不值一提,但是哪个敢说未来的大牛不会踩一下坑呢?所以我就只能给自己这样的小白归纳一下自己的问题了,当然由于是重构项目,后续肯定还会有各种各样的问题,所以如果有兴趣的朋友可以关注我的博客,后续我会将我重构中的问题一一收集。

    正文

    首先我们先来看看canvas的一些基本的常用的操作

    操作类型相关API备注
    绘制颜色drawColor
    drawRGB
    drawARGB
    使用单一颜色填充canvas
    绘制基本形状drawPoint
    drawPoints
    drawLine
    drawLines
    drawRect
    drawRoundRect
    drawOval,drawCircle,drawArc
    依次是点、线、矩形、圆角矩形
    椭圆、圆、圆弧
    绘制图片drawBitmap,drawPicture绘制位图和图片
    绘制文本drawText,drawPostText
    drawTextOnPath
    依次是绘制文字、绘制文字时根据制定每个文字位置、
    根据路径绘制文字
    绘制路径drawPath绘制路径,绘制贝塞尔曲线
    时也需要用到该函数
    顶点操作drawVertices
    drawBitmapMesh
    通过对顶点操作可以使图像形变,
    drawVertices直接对画布作用、
    drawBitmapMesh只对绘制的bitmap作用
    画布裁剪clipPath,clipRect设置画布的显示区域
    画布快照save,restore,
    saveLayerXxx,
    restoreToCount,
    getSaveCount
    依次是保存当前状态、回滚到上一次保存的状态、
    保存图层状态、回滚到制定状态、
    获取保存次数
    画布变换translate,scale,
    rotate,skew
    依次是位移、缩放、旋转、错切
    Matrix矩阵getMatrix,setMatrix,
    concat
    实际上画布的位移,缩放等操作的都是图像
    矩阵Matrix,只不过Matrix比较难以理解
    故封装了一些常用的方法



    当然这么多的操作,其实都只是列举,实际上这篇文章中,我们用到的仅仅只是drawRoundRect以及drawText而已,其他的操作可以在网上查找更多的资料自行了解,当然也可以继续关注我的后续文章。

    NeoBosco

    上图是我们想要实现的结果,当然看到这个图的时候,肯定很多人会觉得这样做其实很简单,不就是绘制一个圆角的矩形,然后通过计算坐标的方式,将文本绘制到矩形的居中位置就好了。好吧,我承认我当时也就是这么想的,但是在我这么甘的时候问题就来了。

    使用drawRoundRect()和drawText()绘制时总会出现莫名其妙的偏差

    float startX = 100 ;
    float startY = 100 ;
    float endX = 600 ;
    float endY = 200 ;
    RectF rectF = new RectF(startX, startY, endX, endY);
    canvas.drawRoundRect(rectF, 20, 20, mButtonPaint);

    首先我们通过上面代码在canvas上绘制出一个圆角的矩形。说到这里就要提一句,canvas.drawRoundRect()有两个不同参的函数,因为博主的项目中需要兼容较低的android系统版本,所以采用上面比较通用的绘制圆角矩形的API。当然这里可能还有一些读者会问Rect和RectF的区别,这个其实度娘一下就已经有很多答案了,博主就不详述了,它代表了坐标系内某一块矩形区域的参数封装,而Rect跟RectF区别在于得到的值的精度问题以及部分API的不同。

    String text = "购买本章" ;
    Paint.FontMetrics fontMetrics = mButtonTextPaint.getFontMetrics();
    canvas.drawText(text, (endX - startX) / 2 + startX , (fontMetrics.bottom - fontMetrics.top) / 2 + startY , mButtonTextPaint);

    接着通过上面的代码,在圆角矩形的居中的位置绘制文本,这里的计算比较简单,就是通过画笔Paint.FontMetrics对文本进行计算。
    绘制的文本的X坐标 = (结束的X坐标 - 起始的X 坐标) / 2 + 起始坐标。
    绘制文本的Y坐标 = (文本的bottom坐标 - 文本的top坐标) / 2 + 起始的Y坐标。

    NeoBosco

    本来以为万无一失的情况,却想不到来了一记晴天霹雳,这蛋疼的位置是什么鬼情况。。。。
    当然面对这样的一种情况,还不至于让我们觉得蛋疼,毕竟调这东西改改算式就好了,慢慢调就好,然!而!事情并没有那么简单,我一开始认为是计算的问题,而后有认为会不会是drawRoundRectdrawText是不是使用的坐标不是同一个,为何出现了这样的偏差呢??但是想想,虽然我大天朝不能用 Google ,但是也不至于这么蛋疼整我们这些小资程序员吧,所以就想了个测试的方法,就是将文本跟的起始坐标跟圆角矩形的起始坐标设置成一样,这样不就能排除问题了吗?

    String text = "购买本章" ;
    Paint.FontMetrics fontMetrics = mButtonTextPaint.getFontMetrics();
    canvas.drawText(text, startX, startY, mButtonTextPaint);

    然后就将绘制文本的代码的X,Y坐标改成跟RoundRect的X,Y坐标一致。
    然!而!
    NeoBosco

    WTF~~这是什么鬼。。为什么即使设置成一样的X,Y坐标却相差那么远,这不是瞎搞吗?来到这个地步,难道还敢说这坑爹的不是两种不同的坐标系?
    然!而!峰回路转的是,这还真不是两个坐标系不同,这里面还有一个坑爹的知识点,就是baseline的概念,什么是baseline?就是所谓的基线了,至于概念这里就长篇大论了,这个在度娘上面,你找到的解释简直是多如繁星。接着,我们知道问题可能在文本的baseline上面的话,我们就可以尝试一下这个问题了。

    Paint.FontMetrics fontMetrics = mButtonTextPaint.getFontMetrics();
    float baseline = (rectF.bottom + rectF.top - fontMetrics.bottom - fontMetrics.top) / 2;
    canvas.drawText(text, rectF.centerX(), baseline, mButtonTextPaint);

    所以这里我就将baseline进行重新计算,然后再一次绘制文本。。

    NeoBosco

    我们惊讶的发现,问题就这么容易就被解决了,而这算式在度娘上也是能够找到,所以也就不解释了,到此本文所说的问题也就解决了,希望能够帮到大家,谢谢!

    展开全文
  • 回复讨论(解决方案) CANVAS让文本自动换行恐怕是不可能的,因为绘制的文本和矩形没关系, 只有自己根据矩形,文本的大小和位置计算后,再绘制文本 计算文本占的宽度来换行 如果担心计算麻烦 可以用等宽的字体

    var canvas = document.getElementById("demo") var ctx = canvas.getContext('2d'); ctx.font = "32pt Arial"; ctx.beginPath(); ctx.lineWidth = "1"; ctx.strokeStyle = "blue"; ctx.moveTo(100, 100); ctx.lineTo(100, 400); ctx.lineTo(400, 400); ctx.lineTo(400, 100); ctx.closePath(); ctx.stroke(); ctx.strokeText("hello world hello world hello world hello world hello world", 120, 200); ctx.strokeStyle = "red"; ctx.stroke();

    无法换行啊!!!

    有什么方法可以换行???

    回复讨论(解决方案)

    CANVAS让文本自动换行恐怕是不可能的,因为绘制的文本和矩形没关系,

    只有自己根据矩形,文本的大小和位置计算后,再绘制文本

    计算文本占的宽度来换行

    如果担心计算麻烦 可以用等宽的字体

    展开全文
  • HTML codeCanvas beginePath example function beginDemo() { var canvas = document.getElementById("demo") var ctx = canvas... ctx.strokeText("我是中文字", 120, 200); ctx.strokeStyle = "red"; ctx.stroke(); }
  • var canvas = document.getElementById("demo") var ctx = canvas.getContext('2d'); ctx.font = "32pt Arial"; ctx.beginPath(); ... ctx.lineWidth = "1";... ctx.strokeText("hello world hello world hello ...
  • html5 canvas 画一个矩形在矩形添加文字文字颜色与矩形背景颜色问题。 var c=this.callout[0]; var cxt=c.getContext("2d"); cxt.beginPath(); cxt.moveTo(x0,y0); cxt.lineTo(x1,y1); cxt....
  • 如何给图像添加矩形框?以及添加想要输入的文字 ? 案例程序,如下所示: clc; close all; clear all;image = imread('/home/wangxiao/Pictures/image/gamersky_022origin_043_20147261368D.jpg');figure;imshow...
  • 底部是如何添加一个矩形,这可能是问题的一部分。最上面是应该我的世界里工作的代码。newRect.().html(" Test " + "" + "Test2 ");这会将文本字段插入SVG,但它只是不显示:html: Test Test2 我有一个鼠标移过函数,...
  • 转自python下的opencv画矩形文字注释...pt2: 矩形对角线的另一个顶点 color: 线条颜色 (RGB) 或亮度(灰度图像 )(grayscale image)。 thickness: 组成矩形的线条
  • Viso边框写字最终要实现的效果如下:1、一开始画好如下图: 具体查看如下步骤: OK了!!
  • 使用OpenCV画直线、圆、椭圆、矩形以及添加文字 闲话少说,直接代码 #include <QCoreApplication> #include "opencv2/opencv.hpp" #include <iostream> using namespace std; using namespace cv; ...
  • 如何给图像添加矩形框?以及添加想要输入的文字 ? 案例程序,如下所示:clc; close all; clear all;image = imread('/home/wangxiao/Pictures/image/gamersky_022origin_043_20147261368D.jpg');figure;imshow...
  • 我用如下代码生成一个矩形框,想在矩形框里再添加文字,然后框与框之间有箭头指向。给个大致的思路也好。用哪些模块,哪些函数可以实现这样的功能 ``` from tkinter import * #创建一个Canvas,设置其背景色为白色...
  • 试图一些SVG文本周围加上边框,我的结果会有所不同.HTML :(使用静音类)XCSS:.ablate-x {font-size: 24px;color: gray;opacity: 0.5;font-weight: 900;cursor: hand;cursor: pointer;}.mute {opacity: 1;fill: red;...
  • SVG SVG ShapesSVG有一些预定义的形状元素,可被开发者使用和操作:矩形 圆形 椭圆 线 折线 多边形 路径 下面的章节会为您讲解这些元素,首先从矩形元素开始。SVG 矩形 - 实例 1 标签可用来创建矩形,以及矩形的变种...
  • 主要给大家介绍了关于C#利用GDI+给图片添加文字文字自适应矩形区域)的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
  • 使用canvas图片矩形文字

    千次阅读 2020-05-20 17:47:41
    代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</...
  • linux下 图片上加文字显示(矩形)□乱码问题&linux字体安装 linux系统上传了使用到 new Font 的项目,发现生成的图片的文字都是框框;刚开始一直以为是post请求乱码的问题,最后想起来项目中使用到了windows...
  • 一篇文章的图片处理感觉效果不是很好,又找了个新算法,试了一下效果挺好 处理完轮廓就可以给轮廓框框了 框框完顺便顺便试了一下简单的视频读取 废话不多说直接代码 #开运算操作 def open_mor(binary): ...
  • SVG 1.2微小的添加文本换行,但大多数SVG的实现,你会浏览器中找到(Opera除外)没有实现这个功能。通常由您,开发人员手动定位文本。SVG 1.1规范提供了对此限制的一个很好的概述,以及克服它的可能的解决方案:Each...
  • 视图区画了一些圆,三角形,矩形这些图形等等。现在想让鼠标光标划过这些图形时候添加说明文字。比如鼠标光标移动到某个三角形,显示一下“这是个三角形”。当鼠标光标没三角形区域时候什么都不显示。本人,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 51,440
精华内容 20,576
关键字:

如何在矩形上添加文字