如果您觉得我的文章有用,欢迎点赞和关注,也欢迎光临我的个人博客 >
场景:
创建简易的绘图工具,实现控制画布上的四个锚点的拖拽修改已经绘制的曲线图,通过注释实时显示锚点的具体实时坐标,并通过反色清楚的显示控制点的位置
要求:
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实现贝塞尔曲线显示以及控制等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)