精华内容
下载资源
问答
  • 原理:创建透明度为0的Texture2D,利用改变像素点的颜色,实现画线功能。 创建图片 rawimage 的大小一定要与屏幕大小保持一致 代码部分: 完整代码:挂载RawImage,对应组件拖进去就行 /****************...

    原理:创建透明度为0的Texture2D,利用改变像素点的颜色,实现画线功能。

    创建图片

    rawimage 的大小一定要与屏幕大小保持一致

    代码部分:

    完整代码:挂载RawImage上,对应组件拖进去就行

    /*******************************************************************
    * 作者:     # maki #
    * 创建日期: # 2019年9月4日18:07:57 #
    * 描述:  UGUI 图片划线工具
    ******************************************************************/
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using UnityEngine.EventSystems;
    using UnityEngine.UI;
    
    public enum TextureLineType
    {
        none,//不画线
        line,//自由线
        dotLine,//点画线
        eraseLine,//擦除线
    }
    public class TextureLineTool : MonoBehaviour {
    
        public static TextureLineTool Instance;
        #region 画线设置
        /// <summary>
        /// 画线风格
        /// </summary>
        [SerializeField]
        private TextureLineType lineType;//画线风格
        /// <summary>
        /// 渲染次数:点画线1000,曲线100  不可过大,太消耗渲染性能
        /// </summary>
        [SerializeField]
        private float lineNum = 100f;
        /// <summary>
        /// 笔刷的宽度
        /// </summary>
        [SerializeField]
        private int lineWidth = 3;
        /// <summary>
        /// 笔刷的颜色
        /// </summary>
        [SerializeField]
        private Color lineColor = new Color(1, 1, 1, 0);
        #endregion
    
        /// <summary>
        /// 被操作的贴图
        /// </summary>
        [SerializeField]
        private Texture2D targetTexture;
        /// <summary>
        /// 目标图片UI
        /// </summary>
        [SerializeField]
        private RawImage targetRawImage;
        /// <summary>
        /// 划线相机
        /// </summary>
        [SerializeField]
        private Camera line_Camera;
        /// <summary>
        /// 擦除鼠标图片跟随
        /// </summary>
        [SerializeField]
        private Image mouseImage;
    
        /// <summary>
        /// 上一个点鼠标点
        /// </summary>
        Vector2 lastPoint = Vector2.zero;
    
        /// <summary>
        /// 被记录的鼠标位置
        /// </summary>
        private List<Vector2> mousePoints;
        /// <summary>
        /// 被记录的步骤
        /// </summary>
       private List<Texture2D> textureRecords;
    
        /// <summary>
        /// 当前画板下标
        /// </summary>
        int index = 0;
    
    
        void Awake()
        {
            Instance = this;
        }
        private void Start()
        {
            lineType = TextureLineType.none;
            mousePoints = new List<Vector2>();
            targetRawImage.texture = new Texture2D(Screen.width, Screen.height);
            targetTexture = targetRawImage.texture as Texture2D;
            ClearTexture();
            textureRecords = new List<Texture2D>();
            RecortStep();
        }
    
    
        void Update()
        {
            if (lineType == TextureLineType.line || lineType == TextureLineType.eraseLine)
            {
                if (Input.GetMouseButton(0))
                {
                    if (IsPointerOverUI(targetRawImage.transform))
                    {
                        Vector2 addPoint = line_Camera.ScreenToViewportPoint(Input.mousePosition);
                        OperateTexture(addPoint, lineType);
                    }
                    else
                    {
                        lastPoint = Vector2.zero;
                    }
                }
                if (Input.GetMouseButtonUp(0))
                {
                    lastPoint = Vector2.zero;
                    RecortStep();
                    mouseImage.transform.localPosition = new Vector2(-10000, -10000);
                }
            }
            else if (lineType == TextureLineType.dotLine)
            {
                if (Input.GetMouseButtonDown(0))
                {
                    if (IsPointerOverUI(targetRawImage.transform))
                    {
                        Vector2 addPoint = line_Camera.ScreenToViewportPoint(Input.mousePosition);
                        OperateTexture(addPoint, lineType);
                    }
                    else
                    {
                        lastPoint = Vector2.zero;
                    }
                }
    
            }
           if (Input.GetMouseButtonDown(1))
            {
                lastPoint = Vector2.zero;
                lineType = TextureLineType.none;
            }
        }
    
        /// <summary>
        /// 画线
        /// </summary>
        /// <param name="point"></param>
        /// <param name="mColor"></param>
        private  void OperateTexture(Vector2 point, TextureLineType lineType)
        {
            if (lastPoint == Vector2.zero)
            {
                lastPoint = point;
                return;
            }
            for (int j = 0; j < lineNum; j++)
            {
                float scaleX = Mathf.Lerp(lastPoint.x, point.x, j / lineNum);
                float scaleY = Mathf.Lerp(lastPoint.y, point.y, j / lineNum);
                int textureX = (int)(scaleX * Screen.width);
                int textureY = (int)(scaleY * Screen.height);
                // 线条加粗
                for (int a = textureX - lineWidth; a < textureX + lineWidth; a++)
                {
                    for (int b = textureY - lineWidth; b < textureY + lineWidth; b++)
                    {
                        targetTexture.SetPixel(a, b, lineColor);
                    }
                }
            }
            targetTexture.Apply();
            lastPoint = point;
            if (lineType == TextureLineType.dotLine)
                RecortStep();
            else if (lineType == TextureLineType.eraseLine)
            {
                Vector2 pos;
                if(RectTransformUtility.ScreenPointToLocalPointInRectangle(this.transform as RectTransform,Input.mousePosition,line_Camera,out pos))
                {
                    mouseImage.transform.localPosition = pos;
                }
            }
        }
    
        /// <summary>
        /// 重置贴图(全部擦除)
        /// </summary>
        public void ClearTexture()
        {
            int x, y;
            for (x = 0; x < targetTexture.width; x++)
            {
                for (y = 0; y < targetTexture.height; y++)
                {
                    targetTexture.SetPixel(x, y, new Color(1, 1, 1, 0));
                }
            }
            targetTexture.Apply();
        }
    
        /// <summary>
        /// 设置画线模式
        /// </summary>
        public void SetLineType(TextureLineType type)
        {
            lastPoint = Vector2.zero;
            lineType = type;
            switch (lineType)
            {
                case TextureLineType.none:
                    break;
                case TextureLineType.line:
                     lineNum = 100f;
                     lineWidth = 3;//设置笔宽
                    lineColor = Color.red;
                    break;
                case TextureLineType.dotLine:
                    lineNum = 1000f;
                    lineWidth = 3;//设置笔宽
                    lineColor = Color.red;
                    break;
                case TextureLineType.eraseLine:
                    lineNum = 200f;
                    lineWidth = 30;//设置笔宽
                    lineColor = new Color(1, 1, 1, 0);
                    break;
                default:
                    break;
            }
        }
    
        /// <summary>
        /// 记录步骤
        /// </summary>
        private void RecortStep()
        {
            if (textureRecords.Count > 0)
            {
                if (index != textureRecords.Count - 1)
                {
                    textureRecords.RemoveRange((index + 1), textureRecords.Count - (index + 1));
                }
            }
            Texture2D newTexture = Instantiate(targetTexture);
            textureRecords.Add(newTexture);
            index = textureRecords.Count - 1;
        }
        /// <summary>
        /// 上一步
        /// </summary>
        public void StepUp()
        {
            if (index > 0)
            {
                index--;
                targetTexture = Instantiate(textureRecords[index]);
                targetRawImage.texture = targetTexture;
            }
        }
        /// <summary>
        /// 下一步
        /// </summary>
        public void StepDown()
        {
            if (index < textureRecords.Count - 1)
            {
                index++;
                targetTexture = Instantiate(textureRecords[index]);
                targetRawImage.texture = targetTexture;
            }
        }
    
        /// <summary>
        /// 获取当前UI
        /// </summary>
        private bool IsPointerOverUI(Transform tran)
        {
            if (EventSystem.current.IsPointerOverGameObject())
            {
                PointerEventData pointerEventData = new PointerEventData(EventSystem.current);
                pointerEventData.position = Input.mousePosition;
                List<RaycastResult> result = new List<RaycastResult>();
                EventSystem.current.RaycastAll(pointerEventData, result);
                if (result.Count > 0)
                    foreach (var item in result)
                    {
                        if (item.gameObject.transform.IsChildOf(tran))
                        {
                            return true;
                        }
                    }
            }
            return false;
        }
    }
    

     

    测试代码:

    
    public class LineTest : MonoBehaviour {
    
        public Button Btn_Free;
        public Button Btn_Dolt;
        public Button Btn_Erase;
        public Button Btn_Cancel;
        public Button StepUp;
        public Button StepDown;
        // Use this for initialization
        void Start () {
            Btn_Free.onClick.AddListener(() => TextureLineTool.Instance.SetLineType(TextureLineType.line));
            Btn_Dolt.onClick.AddListener(() => TextureLineTool.Instance.SetLineType(TextureLineType.dotLine));
            Btn_Erase.onClick.AddListener(() => TextureLineTool.Instance.SetLineType(TextureLineType.eraseLine));
            Btn_Cancel.onClick.AddListener(() => TextureLineTool.Instance.ClearTexture());
            StepUp.onClick.AddListener(() => TextureLineTool.Instance.StepUp());
            StepDown.onClick.AddListener(() => TextureLineTool.Instance.StepDown());
        }
        // Update is called once per frame
        void Update () {
    		
    	}
    }

    显示效果如下:

    说明:上一步和下一步,从项目中扣取下来,需求不大,存在bug,没有做修改

    展开全文
  • C#在图片上画线

    千次阅读 2019-07-12 16:58:30
    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms...namespace drawL...

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;

    namespace drawLine
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }

            private void button1_Click(object sender, EventArgs e)
            {
                if (openFileDialog1.ShowDialog() == DialogResult.OK)
                {
                    pictureBox1.Image = Image.FromFile(openFileDialog1.FileName);
                }
            }

            private void button2_Click(object sender, EventArgs e)
            {
                if (pictureBox1.Image != null)
                {
                    Bitmap bt = new Bitmap(pictureBox1.Image);
                    Graphics g = Graphics.FromImage(bt);
                    g.DrawLine(new Pen(Color.Red, 40), new Point(0,bt.Height/2), new Point(bt.Width,bt.Height/2));
                    g.DrawLine(new Pen(Color.Red, 40), new Point(bt.Width/2,0), new Point(bt.Width/2, bt.Height));
                    g.DrawLine(new Pen(Color.Red, 40), new Point(0, 0), new Point(bt.Width, bt.Height));
                    g.DrawLine(new Pen(Color.Red, 40), new Point(0,bt.Height), new Point(bt.Width,0));
                    pictureBox1.Image = bt;
                }
            }
        }
    }
     

    展开全文
  • 有这样一个需求,一张图片上画几条线并保存,如图所示: 已知各个点的x,y坐标,坐标范围是[0.000,1],即将横纵方向分成1000份。 我们可以使用java.awt.Graphics2D的库来实现。 Graphics2DGraphics类提供绘制...

    有这样一个需求,在一张图片上画几条线并保存,如图所示:
    在这里插入图片描述
    已知各个点的x,y坐标,坐标范围是[0.000,1],即将横纵方向分成1000份。

    我们可以使用java.awt.Graphics2D的库来实现。
    Graphics2D在Graphics类提供绘制各种基本的几何图形的基础上进行扩展,拥有更强大的二维图形处理能力,提供坐标转换、颜色管理以及文字布局等更精确的控制。Graphics2D类重要的属性包含以下几个

    • stroke属性
      控制线条的宽度、笔形样式、线段连接方式或短划线图案
    • paint属性
      控制填充效果
    • transform属性
      实现常用的图形平移、缩放和斜切等变换操作
    • clip属性
      实现剪裁效果
    • composit属性
      设置图形重叠区域的效果
    • color
      控制颜色,使用RGB构造
    • Graphics2D类的绘图draw()
      扩充了Graphics的许多方法,可以画线段、矩形、椭圆、圆弧、二次曲线甚至三次曲线等

    相关代码如下:

    import javax.imageio.ImageIO;
    import java.awt.*;
    import java.awt.geom.Line2D;
    import java.awt.geom.RoundRectangle2D;
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * @author 94977
     * @create 2018/12/22
     */
    public class JfreeChart {
    
        /**
        * 线宽,这里默认设置所有线宽都一样,也可根据需求分别设置
        */
        private static final float STROKE_WIDTH = 3.0f;
    
        /**
         * 箭头的高度,单位像素
         */
        private static final Integer ARROW_HEIGHT = 40;
    
        /**
         * 箭头底边的一半,单位像素
         */
        private static final Integer ARROW_LENGTH = 20;
    
        public static void main(String[] args) throws IOException {
            File imgFile = new File("D:\\3.jpg");
            File imgFile2 = new File("D:\\11.jpg");
            BufferedImage srcimg = ImageIO.read(imgFile);
            //Graphics2D对象相当于画笔
            Graphics2D g2d = srcimg.createGraphics();
    
            // 获取图片宽度
            int width = srcimg.getWidth();
            // 获取图片高度
            int height = srcimg.getHeight();
            // 设置线的型式
            Stroke stroke = new BasicStroke(STROKE_WIDTH,   // 线宽
                    BasicStroke.CAP_SQUARE,   // 端点样式
                    BasicStroke.JOIN_BEVEL,  // 接头样式
                    15.0f,       // 拼接限制
                    null,             // 虚线
                    5.0f);      //虚线的设置
            g2d.setStroke(stroke);
    
            //画方向线
            g2d.setColor(new Color(255, 200, 0));
            List<CoordinateDto> list2 = new ArrayList<>();
            list2.add(new CoordinateDto(0.450,0.650));
            list2.add(new CoordinateDto(0.550,0.300));
            getDirectionLine(list2,width,height,g2d);
    
            //画检测线,需至少两个点
            g2d.setColor(Color.GREEN);
            List<CoordinateDto> list = new ArrayList<>();
            list.add(new CoordinateDto(0.400,0.250));
            list.add(new CoordinateDto(0.450,0.500));
            list.add(new CoordinateDto(0.600,0.600));
            list.add(new CoordinateDto(0.750,0.400));
            for(int i = 0 ; i < list.size()-1; i++){
                g2d.draw(getLine(list.get(i).getX(),list.get(i).getY(),list.get(i+1).getX(),list.get(i+1).getY(),width,height));
            }
    
            //g2d.fill3DRect(500,400,100,5,true);
            //画一个矩形
            //RoundRectangle2D rRect = new RoundRectangle2D.Double(13.0,30.0,100.0,70.0,10.0,10.0);
            //g2d.draw(rRect);
    
            //释放此图形的上下文并释放它所使用的所有系统资源
            g2d.dispose();
            ImageIO.write(srcimg, "JPG", imgFile2);
    
        }
    
        private static void getDirectionLine(List<CoordinateDto> list, int width, int height, Graphics2D g2){
            CoordinateDto startPoint = list.get(0);
            CoordinateDto endPoint = list.get(1);
            int sx = (int)(startPoint.getX()*width);
            int sy = (int)(startPoint.getY()*height);
            int ex = (int)(endPoint.getX()*width);
            int ey = (int)(endPoint.getY()*height);
            drawAL(sx, sy, ex, ey, g2);
        }
    
    
        /**
        * 画箭头
        */
        private static void drawAL(int sx, int sy, int ex, int ey, Graphics2D g2) {
            double H = ARROW_HEIGHT; // 箭头高度
            double L = ARROW_LENGTH; // 底边的一半
            int x3 = 0;
            int y3 = 0;
            int x4 = 0;
            int y4 = 0;
            double awrad = Math.atan(L / H); // 箭头角度
            double arraow_len = Math.sqrt(L * L + H * H); // 箭头的长度
            double[] arrXY_1 = rotateVec(ex - sx, ey - sy, awrad, true, arraow_len);
            double[] arrXY_2 = rotateVec(ex - sx, ey - sy, -awrad, true, arraow_len);
            double x_3 = ex - arrXY_1[0]; // (x3,y3)是第一端点
            double y_3 = ey - arrXY_1[1];
            double x_4 = ex - arrXY_2[0]; // (x4,y4)是第二端点
            double y_4 = ey - arrXY_2[1];
    
            Double X3 = new Double(x_3);
            x3 = X3.intValue();
            Double Y3 = new Double(y_3);
            y3 = Y3.intValue();
            Double X4 = new Double(x_4);
            x4 = X4.intValue();
            Double Y4 = new Double(y_4);
            y4 = Y4.intValue();
            //起始线
            g2.drawLine(sx, sy, ex, ey);
            //箭头
            g2.drawLine(ex, ey, x3, y3);
            g2.drawLine(ex, ey, x4, y4);
            //三角形箭头
            //GeneralPath triangle = new GeneralPath();
            //triangle.moveTo(ex, ey);
            //triangle.lineTo(x3, y3);
            //triangle.lineTo();
            //triangle.closePath();
            //实心箭头
            //g2.fill(triangle);
            //非实心箭头
            //g2.draw(triangle);
    
        }
    
        // 计算
        private static double[] rotateVec(int px, int py, double ang,
                                         boolean isChLen, double newLen) {
            double mathstr[] = new double[2];
            // 矢量旋转函数,参数含义分别是x分量、y分量、旋转角、是否改变长度、新长度
            double vx = px * Math.cos(ang) - py * Math.sin(ang);
            double vy = px * Math.sin(ang) + py * Math.cos(ang);
            if (isChLen) {
                double d = Math.sqrt(vx * vx + vy * vy);
                vx = vx / d * newLen;
                vy = vy / d * newLen;
                mathstr[0] = vx;
                mathstr[1] = vy;
            }
            return mathstr;
        }
    
        private static Line2D getLine(double x1 ,double y1,double x2 ,double y2, int width, int height){
            return new Line2D.Double(x1*width,y1*height,x2*width,y2*height);
        }
    
    }
    
    
    public class CoordinateDto {
    
        private double x;
    
        private double y;
    
      //省略getter setter
    }
    

    主要使用的是Graphics2D.drawLine()方法,注意这个方法参数里坐标是以像素为单位,所以代码中对此进行了些转换。

    相关链接:
    stroke属性详解
    对图像像素点的处理

    展开全文
  • 现在我想python的面板导入一张图片然后再图片上画两个线的时候既可以用鼠标也可以用 微调控制器,请问怎么实现
  • opencv鼠标事件获取 图像处理操作(手动画线) 基本思路: (1)读入一张图片 (2)设置鼠标监听事件,鼠标左键按下并且光标...(5)不断更新显示这张图片(opencv画圆画线直接对图进行操作,操作后需要实时更新显示效果...

    opencv鼠标事件获取 图像处理操作(手动画线)

    基本思路:
    (1)读入一张图片
    (2)设置鼠标监听事件,鼠标左键按下并且光标移动触发画点操作
    (3)判断鼠标监听到的点是否是第一个点,第一个点只画圆(半径为1),后续的点画直线
    (4)判断两次触发画点操作间隔的时间,如果时间大于阈值,重新设置当前点为起点
    (5)不断更新显示这张图片(opencv画圆画线直接对图进行操作,操作后需要实时更新显示效果)

    代码:

    //***************************************************************************
    //***************************************************************************
    //鼠标操作在一张图片上面画线
    //***************************************************************************
    //***************************************************************************
    
    #include<iostream>
    #include<time.h>
    #include<opencv2/core/core.hpp>
    #include<opencv2/imgproc/imgproc.hpp>//图像处理的库,circle()要用到
    #include<opencv2/highgui/highgui.hpp>
    
    using namespace std;
    using namespace cv;
    
    Mat img;
    Point p1, p2;
    int point_num = 0;
    clock_t previous=clock(),current;
    double duration;
    
    
    //*********************************************
    //响应函数,在点击的地方画圆
    //传递过来的参数:鼠标事件,鼠标事件发生处的坐标,FLAG
    //********************************************
    static void draw_circle(int event, int x, int y, int flags, void *)
    {
    	if ((event == CV_EVENT_MOUSEMOVE)&&(flags&CV_EVENT_FLAG_LBUTTON))//鼠标左键按下并且光标移动
    	{
    		p2 = Point(x, y);
    		current = clock();//clock返回ms, time则返回s
    		duration = (double)(current - previous);//返回的是double类型的s
    		cout << duration << endl;
    
    		//如果停顿时间很长,则重新起点画线
    		if (duration > 200)//经验阈值200
    		{
    			point_num = 0;
    		}
    		cout << "Mouse Event" << endl;
    
    		//判断当前点是否是起点,起点只画圆,后续点画圆连线
    		if (point_num != 0)
    		{
    			//circle(img, p2, 1, Scalar(0, 0, 255)); //描以后的点
    			line(img, p1, p2, Scalar(0, 0, 255));//与前一点进行连线  参数:画图板背景、第一个点位置、第二个点位置、BGR颜色
    		}
    		else
    		{
    			circle(img, p2, 1, Scalar(0, 0, 255));//描第一个点 参数:画图板背景、原点的位置、半径、BGR颜色
    		}
    		p1 = p2;
    		previous = current;
    		point_num++;
    		
    	}
    }
    
    
    int main()
    {
    	img = imread("picture.png");
    	namedWindow("image");
    	setMouseCallback("image", draw_circle);//回调draw_circle(),获取鼠标信息
    	while (1)
    	{
    		imshow("image", img);
    		waitKey(30);
    	}
    }
    

    Tips
    (1)用两次画线的点触发之间的时间间隔,判断是否要连续画线
    (2)鼠标事件同时获取单击和光标移动,要用event配合flags

    if ((event == CV_EVENT_MOUSEMOVE)&&(flags&CV_EVENT_FLAG_LBUTTON))//鼠标左键按下并且光标移动
    

    效果:
    在这里插入图片描述

    展开全文
  • 直接先效果视频 代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style type="text/css"> .wrap{ background: #...
  • 小弟最近因为公司业务需求,需要给学校的老师们做一个手机和电脑同步进行图片上画线批注的效果.开始网上找了几天, 但没有找到符合我们要求的开源项目.所以最后花了一定时间研究相关信息,写了这个自定义view.. ...
  • python PIL模块在图片画线写字

    千次阅读 2019-05-07 16:18:42
    图片上画线条 import sys from PIL import Image,ImageDraw im = Image.open("th.png") draw = ImageDraw.Draw(im) #实例化一个对象 draw.line((0, 0) + im.size, fill=128, width=5) #线的起点和终点,线宽 draw....
  • C#图片处理之:在图片上画直线

    千次阅读 2010-05-25 21:42:00
    C#图片处理之:在图片上画直线 在图片上画直线比画框更简单。线形的控制还是通过对Pen的设置来实现的... /**//// /// 在图片上画线 /// /// 原始图 /// 起始点 /// 终止点 /// 线的颜色 /// 线宽 /// 线条样式 
  • Canvas动态加载图片画线、画点

    千次阅读 2018-11-06 10:59:25
    // 地图画线 canvas . addEventListener ( "click" , function ( event ) { let ev = event || window . event ; let x , y ; x = ev . clientX - canvas . getBoundingClientRect ( ) . ...
  • jpanel上画线和添加图片

    千次阅读 2007-08-17 15:28:00
    面板中线条(只能jpanel中,jframe框架内不可以),按ctrl+M键调出复写方法的对话框,输入paintComponent(Graphics g)方法,将其加入当前panel中,方法中要调用父类的paintComponent(),即--super....
  • java为图片上面画线

    千次阅读 2018-11-18 12:48:22
    package com.bootdo.testDemo; import java.awt.BasicStroke; import java.awt.Color; import java.awt.Graphics2D; import java.awt.Image;...import java.awt.Stroke;...import java.awt.image.BufferedImage;...import...
  • 如何地图上画曲线轨迹(贝塞尔曲线) 标签: Android高德地图曲线地图贝塞尔曲线地图路径渐变色 2015-11-12 11:04 1011人阅读 评论(1) 收藏 举报  分类: Android开发高德地图部分(1)  ...
  • QLabel显示图片并且通过鼠标点击画线。如果只是实现利用鼠标绘制,重写void paintEvent(QPaintEvent *event);void mousePressEvent(QMouseEvent *e); void mouseMoveEvent(QMouseEvent *e); void ...
  • 画线 动画效果

    千次阅读 2013-10-25 16:31:07
    js 画线 动画效果
  • java使用OpenOffice将word转成PDF后,图片画线消失掉,但是文字和表格却没事儿, 什么原因啊,怎么解决?求大神赐教,急求
  • asp.net 图片 画线

    千次阅读 2010-05-02 11:04:00
    Bitmap srcImg = new Bitmap(300,... //也可以读入一张图片Graphics graphics = Graphics.FromImage(srcImg);Font font = new Font("宋体", 16); //字体与大小Brush brush = new SolidBrush(Color.Red);graphics.DrawSt
  • 转载▼     p = imread('g.jpg'); %读取图像 I=imresize(p,[256,256]); %将图像的尺寸调整为【256*256】 rs = size(I, 1); cs = size(I, 2);%取图像的行列数 sz = 4;%设置块的大小 ...
  • WPF:使用鼠标Canvas面板上画线

    千次阅读 2015-09-08 15:13:02
    使用Canvas+Line 任意画线  主要使用布局面板Canvas作为背景,通过其属性Children添加Line 来实现画线。可以理解为 每一个Line 就是一个点。  不清楚Canvas的用法可以参见:点击打开链接 Line的参见:点击打开...
  • //缓冲区上画线 foreach (Line line in lines) { line.Draw(bg.Graphics); } //缓存图层中画直线的样式,并没有实际显示,尽量与绘图的样式一致 bg.Graphics.DrawLine(SystemPens.ControlText, mPoint1, ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 157,516
精华内容 63,006
关键字:

怎么在图片上画线