关于使用canvas画图时,图片被拉伸的问题

关于使用canvas画图时,图片被拉伸的问题,第1张

如果您觉得我的文章有用,欢迎点赞和关注,也欢迎光临我的个人博客 >

塞尔曲线

场景:

创建简易的绘图工具,实现控制画布上的四个锚点的拖拽修改已经绘制的曲线图,通过注释实时显示锚点的具体实时坐标,并通过反色清楚的显示控制点的位置

要求:

1 创建一个512512的canvas画布

2 在该画布上任意创建四个锚点,使用贝塞尔曲线进行连接

3 可在画布上自由拖拽上面的锚点,从而实现贝塞尔曲线的联动,每个点都有一个跟随点移动的注释(文字+箭头),说明该点的坐标

4在此基础上,实现一个黑白渐变色的背景,然后在锚点周围20个像素内,将锚点所处的背景作反色,突出锚点的显示

明确:

贝塞尔曲线通过canvas绘制,canvas自带贝塞尔曲线绘制方法 bezierCurveTo()

显示锚点可以在canvas上覆盖div 将锚点放在div中

锚点拖动,添加事件监听, 鼠标按下 为被点击的锚点 添加鼠标移动事件,松开 注销鼠标移动事件

拖动锚点时要做什么

修改注释内的坐标

canvas根据锚点坐标重绘贝塞尔曲线

锚点周围20像素背景色取反

js 提供了很多的渲染方式,我们选择的当然是webglrenderer,但我们这里要将canvasrenderer与webglrenderer两种渲染方式做一个比较。

renderer=new threewebglrenderer();

替换为canvas渲染器:

renderer=new threecanvasrenderer();

java swing中将组件的背景设置成透明的示例如下:

import orgeclipseswt;

import orgeclipseswtgraphics;

import orgeclipseswtlayoutFillLayout;

import orgeclipseswtwidgets;

import orgeclipseswtevents;

public class Talpha {

        /

          @param args

         /

        public static void main(String[] args) {

                // TODO Auto-generated method stub

                final Display display = new Display();

                final Shell shell = new Shell(display);

                shellsetBackground(displaygetSystemColor(SWTCOLOR_BLUE));

                Canvas canvas = new Canvas(shell, SWTNO_BACKGROUND);

                //使用paintlistener,保证每次均重新绘制。

                canvasaddPaintListener(new PaintListener() {

                        public void paintControl(PaintEvent e) {

                                GC gc = egc;

                        //读图像

                        ImageData imageData = new ImageData("1jpg");

                                 //这里是建立从左到右的渐进Alpha。

                   byte[] alphaValues = new byte[imageDataheight  imageDatawidth];

                                for (int j = 0; j < imageDataheight; j++) {

                                        for (int i = 0; i < imageDatawidth; i++) {

                              alphaValues[j  imageDatawidth + i] = (byte) (255 - 255

                                                                 i / imageDatawidth);

                                        }

                                }

                                imageDataalphaData = alphaValues;

                                Image image = new Image(display, imageData);

                         //绘制                               

                        gcdrawImage(image,0,0);//关键点是这里设置背景颜色

                        }

                });

                FillLayout fillLayout = new FillLayout();

                fillLayouttype = SWTVERTICAL;

                shellsetLayout(fillLayout);

                shellsetSize(200, 600);

                shellopen();

                while (!shellisDisposed()) {

                        if (!displayreadAndDispatch())

                                displaysleep();

                }

                displaydispose();

        }

}

先用GetDC(0)函数获取整个屏幕设备场景(DC),再用CopyRect函数拷贝窗口的背景到指定的Tbitmap,该Tbitmap就是我们所要的图象了。其中函数GetDC(0)取得的DC可用TCanvasHandle保存;而CopyRect是TCancas类的成员函数,作用是从一Canvas中拷贝一指定区域(Rect)到另一Canvas的指定区域。

以上就是关于关于使用canvas画图时,图片被拉伸的问题全部的内容,包括:关于使用canvas画图时,图片被拉伸的问题、canvas中如何实现圆形背景图片、使用Canvas实现贝塞尔曲线显示以及控制等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/9482358.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存