aardio - 【库】内存画板 paint

33 篇文章 17 订阅


1、优化各项功能函数,力争代码最简洁、调用最直接。

2、对使用坐标定位区域的函数,都对应四种方式:

数据格式函数名后缀函数用法说明
::RECTfunc(x1,y1,x2,y2)

使用左上、右下两点坐标:(x1,y1,x2,y2)

或称:四边 ltrb(left,top,right,bottom)

func(RECT)直接使用 ::RECT( left,top,right,bottom )
::RECTFFfuncF(x,y,width,height)

使用左上点坐标x、y  +  宽、高

或称:左上宽高  xywh

funcF(RECTF)直接使用 ::RECTF( x,y,width,height )

使用中一定要注意两种结构的不同:


RECT:{ left , top , right , bottom }    // 左边,顶边,右边,底边

1、RECT影响区域(不含右边及底边):横向:left right-1    纵向:top bottom -1

2、数值类型:整数型(int)


RECTF:{ x , y , width , height }    // 左边,顶边,宽度,高度

1、RECTF影响区域:横向:x x +width -1    纵向:yy+height -1

2、数值类型:浮点型(float)


一、库下载:

因为代码较长,放在本文内影响阅读体验,所以请各位自行下载:

库  名  称:paint

文件位置:lib\godking\

下载地址:光庆·程序·在线 (aardio资源下载 → paint.rar)

二、应用实例

1、用小海龟实现漂亮的动画效果:

        用小海龟简单几句代码就可以写出很漂亮的动画效果!

        1)效果:

        2)代码: 

import win.ui;
/*DSG{{*/
var winform = win.form(text="aardio form";right=481;bottom=397)
winform.add(
button={cls="button";text="Button";left=159;top=347;right=295;bottom=384;z=2};
plus={cls="plus";left=6;top=9;right=478;bottom=328;z=1}
)
/*}}*/

import godking.paint
var p=godking.paint.fromPlus(winform.plus,true/*自动刷新*/,false/*重绘背景*/)
p.bkcolor = 0xFFFFFFFF;
p.textAntiAlias = true;
p.offsetMode = false;
winform.button.oncommand = function(id,event){
	p.clear();
	var t=p.turtle();
	//画复杂图形
	t.curx=150;
	for(i=1;12;1){
		t.go(100);
		t.fillEllipse(25);
		t.text(tostring(i),-20,-20,40,40,::LOGFONT(name="黑体";point=12;color=0xFFFFFFFF),0,1,1);
		t.back();
		t.left(30);
		..win.delay(100);
	}	
	// 画五角星
	t.curx=300
	t.angle=0
	for(i=1;5;1){
		t.go(100);
		t.right(180*4/5);
		..win.delay(100);
	}
}
winform.show();
win.loopMessage();

2、用小海龟画樱花树:

简单的几句代码画樱花树(只是有点不像樱花^_^)

        1)代码:

import win.ui;
/*DSG{{*/
var winform = win.form(text="aardio form";right=481;bottom=397)
winform.add(
button2={cls="button";text="Button";left=189;top=343;right=275;bottom=379;db=1;dl=1;dr=1;dt=1;z=2};
plus={cls="plus";left=2;top=8;right=474;bottom=327;bgcolor=16777215;db=1;dl=1;dr=1;dt=1;notify=1;z=1}
)
/*}}*/
import godking.paint
var p = godking.paint.fromPlus(winform.plus,true/*自动刷新*/,false/*重绘背景*/);
var t = p.turtle();
..math.randomize();
d = function(angle,width,length,num,x,y){
	t.setPos(x,y);
	t.angle = angle;
	t.penWidth = width;
	t.penColor = 0x88888888;
	t.go(length,true);
	if width<1 or length<1{
		t.penColor = 0xaaf4c3d2;
		t.penWidth = 1 ;
		t.fillEllipse(..math.random(2,4),);
		return ;
	} 
	x,y = t.getPos();
	for(i=1;num;1){
		..win.delay();
		d(angle+..math.random(-40,40),width*..math.random(6,9)/10,length*..math.random(5,10)/10,num,x,y);
	}
}
winform.button2.oncommand = function(id,event){
	d(90,5,60,3,winform.plus.width/2,winform.plus.height);
}
winform.show();
win.loopMessage();

        2)效果: 

动态效果如下:

樱花效果2:

 代码:

import win.ui;
/*DSG{{*/
var winform = win.form(text="aardio form";right=481;bottom=397)
winform.add(
button2={cls="button";text="Button";left=189;top=343;right=275;bottom=379;db=1;dl=1;dr=1;dt=1;z=2};
plus={cls="plus";left=10;top=10;right=470;bottom=329;clipBk=false;db=1;dl=1;dr=1;dt=1;notify=1;z=1}
)
/*}}*/

import godking.paint
var p=godking.paint.fromPlus(winform.plus,false/*自动刷新*/,false/*重绘背景*/);
var t=p.turtle();
winform.button2.oncommand = function(id,event){
	p.clear(0xFFFFFFFF);
	for(i=1;150;1){
		p.fillEllipseF(math.random(winform.plus.width/5,winform.plus.width*4/5),
		math.random(winform.plus.height-20,winform.plus.height),
		math.random(5,10),
		math.random(2,4),
		0xFFFFc3d2);
	}
	d(90,5,50,winform.plus.width/2,winform.plus.height-10);
	p.plus.update();
}
d = function(angle,width,length,x,y){
	t.setPos(x,y);
	t.angle = angle;
	t.penWidth = width;
	..math.randomize();
	t.penColor = 0xFFBBBBBB;
	t.go(length,true);
	if width<1 or length<1{
		t.penColor = 0xFFFFc3d2;
		t.fillEllipse(..math.random(4,8),);
		t.penColor = 0x66FF0000;
		t.fillEllipse(2);
		//p.updatePlus();  // 屏蔽此行跳过过程动画
		return ;
	} 
	x,y = t.getPos();
	d(angle+math.random(20,25),width-0.4,length-math.random(4,5),x,y);
	d(angle-math.random(20,25),width-0.4,length-math.random(4,5),x,y);
}
winform.show();
win.loopMessage();

3、用画板画心电图

        1)代码:

import win.ui;
/*DSG{{*/
var winform = win.form(text="aardio form";right=499;bottom=379)
winform.add(
button2={cls="button";text="Button";left=200;top=320;right=286;bottom=356;db=1;dl=1;dr=1;dt=1;z=2};
plus={cls="plus";left=10;top=10;right=490;bottom=300;db=1;dl=1;dr=1;dt=1;notify=1;z=1}
)
/*}}*/

import godking.paint
var p=godking.paint.fromPlus(winform.plus,false/*自动刷新*/,false/*重绘背景*/);
p.bkcolor=0xFF559977;
..math.randomize();
winform.button2.oncommand = function(id,event){
	var x,y = p.width/2,p.height/2;
	var h = p.height;
	p.fillRect(x-10,0,x+11,h,0xFF5599CC,true);
	var ll,lr,rl,rr = x-21,x-11,x+11,x+21;
	var lasty1,lasty2 = ..math.random(y-100,y+100),..math.random(y-30,y+30);
	while(true){
		p.copyRectF(0,0,lr+1,h,-10/*distX*/,0/*distY*/,/*distWidth*/,/*distHeight*/,true,true);
		p.copyRectF(rl,0,lr+1,h,rr/*distX*/,0/*distY*/,/*distWidth*/,/*distHeight*/,true,true);
		var y1,y2 = ..math.random(y-100,y+100),..math.random(y-30,y+30);
		p.drawLine(ll,lasty1,lr,y1,0xFF000000,1);
		p.drawLine(rl,y2,rr,lasty2,0xFFFFFFFF,1);
		p.fillRect(x-10,0,x+11,h,0xFF5599CC);
		lasty1,lasty2 = y1,y2;
		p.plus.update()
		if !..win.delay(50) break;
	}
}
winform.show();
win.loopMessage();

        2)效果: 

4、图片百叶窗式交替显示

        1)效果

import win.ui;
/*DSG{{*/
var winform = win.form(text="aardio form";right=481;bottom=397)
winform.add(
button2={cls="button";text="Button";left=189;top=343;right=275;bottom=379;db=1;dl=1;dr=1;dt=1;z=2};
plus={cls="plus";left=10;top=10;right=470;bottom=329;bgcolor=12639424;clipBk=false;db=1;dl=1;dr=1;dt=1;notify=1;z=1}
)
/*}}*/

import godking.paint
var p=godking.paint.fromPlus(winform.plus,true/*自动刷新*/,false/*重绘背景*/)
winform.button2.oncommand = function(id,event){
	import inet.http
	var img = inet.http().get("https://aardio.com/logo.png");
	var img2 = inet.http().get("http://chengxu.online/images/banner.gif");
	var w,h = winform.plus.width,winform.plus.height;
	var panx = 0;
	p.autoUpdatePlus = false;
	while(true){
		p.clear();
		// 画第一张
		p.clip.set(0);
		for(i=0;w+40;40){
			var x=i-panx;
			var x1=x+20;
			if x1>w x1=w;
			if x<0 x=0;
			p.clip.set(x,0,x1,h,0,2/*_CombineModeUnion*/);
		}
		p.drawImageF(0,0,w,h,img);
		// 画第二张
		p.clip.set(0);
		for(i=20;w+40;40){
			var x=i-panx;
			var x1=x+20;
			if x1>w x1=w;
			if x<0 x=0;
			p.clip.set(x,0,x1,h,0,2/*_CombineModeUnion*/);
		}
		p.drawImageF(0,0,w,h,img2);
		// 刷新显示
		p.clip.set();
		p.plus.update();
		panx = panx+1;
		if panx>40 panx=0;
		if !..win.delay(50) break;
	}
}
winform.show();
win.loopMessage();

        2)代码

5、滚动文本效果

        1)效果

        2)代码

import win.ui;
/*DSG{{*/
var winform = win.form(text="aardio form";right=759;bottom=469)
winform.add(
button={cls="button";text="Button";left=308;top=399;right=443;bottom=450;z=2};
plus={cls="plus";left=32;top=21;right=736;bottom=384;background="E:\壁纸\1 (3).jpg";db=1;dl=1;dr=1;dt=1;notify=1;repeat="tile";z=1}
)
/*}}*/

winform.button.oncommand = function(id,event){
	import godking.paint;
	var p = godking.paint.fromPlus(winform.plus,false/*自动刷新*/,false/*重绘背景*/);
	p.offsetMode = false;
	var font = ::LOGFONT(name="宋体";h=20;color=0xFFFFFFFF);
	var text = `黄子平老师作文无废字,句句推敲。以前总觉得他文章出得慢了些也少了些,于是只好反复玩味。而每每玩味,又觉得便是出得慢些也无妨,因为每篇文章都有多层意蕴,若将不同的文章加以排列组合,可汇合出不同的共鸣音,引起不同的省思,于是一篇文章便衍生出了无数文章。此次他以“文本及其不满”为题,收录一批讨论文外之意的文章,便引人关注言语未尽处的斑驳光辉了。前言部分黄子平借着罗兰·巴特的“文本之愉悦”提示出文字语义已然抵达处之外的另一重维度,一个主体迷失且文化破碎的场域,它在僵化了的狭隘文字符号之外,开启另一思考的天地。随后的小集分为“散文之什”“评论之什”“演讲之什”“访谈之什”四部分。“散文之什”围绕读书和写作的某一旧事,延伸出与该事件相关的人事物,不用说已是文本之外的世界了。那些书与文的旧事就好比一滴水落入记忆的海洋里,荡开层层波纹,跃动出记忆的金边。于是就有了仅凭字面意完全难以领悟的“70年代日常语言学”,有了77级北大中文系与《早晨》文学社的生活点滴,有了风云际会下的《读书》和“三人谈”。特别是在1970年代日常语言中高妙使用的“一是要抓紧,二是要注意政策”,乍看是对毛语录的直接引用,却随着言说者制造的语境不同,有了恋爱与生育的隐喻,足以照见语言本身的干枯,和它所承载的回忆之丰腴。若说第一部分是以文学性的抒写绽开文字间隙里的缤纷,后三部分则从学理的角度,以几部小作品为抓手,伴着反思现代性和现代学科建制的视野,打开了文本自身及学术研究常触碰不到的文脉之韵。“评论之什”的各篇目之间可读解出一种相互补充与回应的关系:《同是天涯沦落人》从唐到当代几部作品的历时视角,读解出一种叙事模式基于特定语境的反复出现,探讨文学的某种“同一历史内容向同一审美形式的积淀”;《汪曾祺林斤澜论小说》则相对于《同是天涯沦落人》的历时,讲出了共时的两位作家各自侧重于“苦心经营”与“随便”,而交错出小说某种既定的组织方式;《语言洪水中的坝与碑》反思了叙事的既定符码,而《黄春明小说中的传媒人及其尊严》则从黄春明所书写的人物如何在现代社会关系中异化成为“传媒人”而丧失了自然性,体现出人被叙事所符码化的结果;《撬动一下现代小说的固有概念》从刘大任的作品出发,以东方叙事传统来尝试撬动“人物”“情节”等固有概念,反思“小说”本是“欧洲写实小说”的简称,进而让东西方叙事重新碰撞,来引起对概念的拆解;而正因为人自身及其所处环境都受到符码左右,本节最初的《批评的位置》实际上也在提供最后的解决方案,即写作者或者知识分子应有“无家可归”或“格格不入”的批评的位置,也或者说是本雅明所谓游荡者所应有的回身的距离。而黄子平的论述也便站在了现世符码之外,将现世也读作一个文本,挥洒出现代社会与现代人的编制方式。“演讲之什”“访谈之什”,顾名思义,是对其演讲和访谈的整理,由于它们本是源于声音,从形式上说已是文字之外了。只是整理稿又必然落在文字上,由是演讲与评论已经颇为混同,特别是其中几篇多在主流学术期刊发表,混杂在一片“评论”之中。硬要区分的话,演讲的部分黄子平更加自由挥洒,选择的主题也更加“非文学”,比如谈到张爱玲笔下的服饰、鲁迅纵横捭阖的“学匪式考古学”、沈从文作品的视觉化改编等等,颇罕见于主流的学术研究。“访谈之什”的部分,可谓对前几部分内容作了补充,勾勒出他的学术简历和主要的思想谱系。黄子平大抵是批评家作史,往往从文章带给人最直接的感觉和思想冲击入手,挖掘文学(其实也应包括艺术)的潜在脉络。《同是天涯沦落人》就着“唐代的一首古律诗、元代的一本杂剧、现代的一篇抒情性短篇小说,和当代九部‘系列中篇’里最先发表的一部”,提示出自古而今的书写中,知识分子常借一女子来感喟沦落的命运。黄子平也自嘲仅选取如此少量的文本,“年代相隔如此久远,在文学史上的分布如此不均匀,体裁之间的差异如此悬殊,作品的代表性也无法加以严格的论证”,着实是一篇“冒失”的文章。但文学实在有现代学科研究范式所难以触及的直感之处,那些难以言传的韵味若在标准的学术化的论述下,怕早已成了“贫乏和苍白,琐碎与枯燥”。所以黄子平的这种写法,倒让沉潜于文字长河里的优美浮现出来,捕捉出文学终归会形成某种特定的技巧和形式。这便是对当下主流的学术研究体制展开反思,也是对学术符码的撬动了。也或者说,黄子平本就是诗人、文人,用了诗话、词话一般的文法去观视文学。一如他说《沧浪诗话》较之《文心雕龙》更直接地触碰到了人们的感知一般,他甩开学科建制的束缚,极尽文采风流地指点出文之为文的动人之处。这也可谓是从他自己的思想和情感中生发出的一个文学世界。黄子平曾在闲聊中说,“文以气为主”,即便是论文,也要让中间的文气不断。想来又何止是一篇文章,这一部小集也用它绵延的气,锁住了读者。`
	text = ..string.split(text,"<。>");
	for(i=1;#text;1){
		font.color = math.random(0xFFBBBBBB,0xFFFFFFFF);
		p.scrollText(text[i]+"。",font);
		p.plus.update();;
		..win.delay(1000);
	}
}
winform.show();
win.loopMessage();

6、5×5拼图游戏

        1)效果

         2)代码

import win.ui;
/*DSG{{*/
var winform = win.form(text="aardio form";right=533;bottom=542)
winform.add(
plus={cls="plus";left=20;top=20;right=520;bottom=520;db=1;dl=1;dr=1;dt=1;notify=1;z=1}
)
/*}}*/

winform.show();
import godking.paint
var p = godking.paint.fromPlus(winform.plus,false/*自动刷新*/,false/*重绘背景*/);
p.bkcolor = 0xFF000000;

//生成一个空图片
var nullimg = p.getImage(,,::RECTF(0,0,100,100));

//初始化图像组
import inet.http
var imgs = p.splitImage(inet.http().get("https://img2.baidu.com/it/u=1858862446,3273940227&fm=253&fmt=auto&app=120&f=JPEG?w=560&h=500"),5,5);

//初始化区域组
var rectfs = p.splitRectF(5,5);

//开始乱序赋值
newimg = ..table.clone(imgs); // 复制一个图像表,保留原表用来做验证
newimg[25] = nullimg; // 将图像最右下角的那一块变为黑色
..table.shuffle(newimg); // 打乱顺序

for(i=1;#newimg;1){ // 填充到画板
	p.drawImageF(rectfs[i],newimg[i]);
}
 
//处理鼠标点击事件
winform.plus.onMouseDown = function(wParam,lParam){
    var x,y = win.getMessagePos(lParam);
	for(i=1;#rectfs;1){
		if p.pointInRectF(x,y,rectfs[i]){
			var nullindex = null;
			//上边 
			if i>5 && newimg[i-5] = nullimg nullindex=i-5;
			//下边
			if !nullindex && i<21 && newimg[i+5] = nullimg nullindex=i+5;
			//左边
			if !nullindex && (i-1)%5 && newimg[i-1] = nullimg nullindex=i-1;
			//右边
			if !nullindex && i%5 && newimg[i+1] = nullimg nullindex=i+1;
			//交换图像
			if nullindex {
				newimg[i],newimg[nullindex] = newimg[nullindex],newimg[i];
				p.drawImageF(rectfs[i],newimg[i]);
				p.drawImageF(rectfs[nullindex],newimg[nullindex]);
				p.plus.update();
			}
			return ; 
		}
	}
}
p.plus.update();
win.loopMessage();

7、显示古诗词

        1)效果

        2)代码

import win.ui;
/*DSG{{*/
var winform = win.form(text="aardio form";right=533;bottom=542)
winform.add(
button={cls="button";text="Button";left=198;top=467;right=321;bottom=514;z=2};
plus={cls="plus";left=17;top=18;right=517;bottom=418;edge=1;notify=1;z=1}
)
/*}}*/
import godking.paint
var p = godking.paint.fromPlus(winform.plus,false/*自动刷新*/,false/*重绘背景*/);
p.textAntiAlias = true;
var w,h = p.width,p.height;
import inet.http
p.bkimg = inet.http().get("https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fhbimg.b0.upaiyun.com%2F508d5999f68669b961e8275770a79dd0b492201c21b18-VZ1ryO_fw658&refer=http%3A%2F%2Fhbimg.b0.upaiyun.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1636267573&t=4336c70c9c83be6d3ddd0e6a97c9e2d6")
winform.show();
p.fillRectF(0,0,w,80,0x99000000);
p.fillRectF(0,320,w,80,0x99000000);
p.fillRectF(0,80,w,240,0x99FFFFFF);
p.plus.update();
var text = `    《岳阳楼记》

庆历四年春,滕子京谪守巴陵郡。越明年,政通人和,百废具兴,乃重修岳阳楼,增其旧制,刻唐贤今人诗赋于其上,属予作文以记之。
予观夫巴陵胜状,在洞庭一湖。衔远山,吞长江,浩浩汤汤,横无际涯,朝晖夕阴,气象万千,此则岳阳楼之大观也,前人之述备矣。然则北通巫峡,南极潇湘,迁客骚人,多会于此,览物之情,得无异乎?
`
winform.button.oncommand = function(id,event){
	for(i=1;..string.len(text);1){
		p.delRectF(0,80,w,240);
		p.fillRectF(0,80,w,240,0x99FFFFFF);
		p.drawTextF(::RECTF(5,85,w-30,230),..string.left(text,i,true),
		::LOGFONT(name="宋体";point=16;color=0xFF000000;weight=700),{3});
		p.plus.update();
		if !..win.delay(100) break;
	}
}
win.loopMessage();

8、梅花开

        1)效果

        2)代码

import win.ui;
/*DSG{{*/
var winform = win.form(text="aardio form";right=533;bottom=590)
winform.add(
button={cls="button";text="Button";left=197;top=536;right=322;bottom=575;z=2};
plus={cls="plus";left=17;top=18;right=517;bottom=518;bgcolor=0;db=1;dl=1;dr=1;dt=1;notify=1;z=1}
)
/*}}*/
import godking.paint
var p = godking.paint.fromPlus(winform.plus,true/*自动刷新*/,false/*重绘背景*/)
import inet.http
p.bkimg = "https://i-blog.csdnimg.cn/blog_migrate/8ef8f965208da6c6cddc4ca4fb4dc7a0.jpeg"
var meihua = ..gdip.bitmap("https://i-blog.csdnimg.cn/blog_migrate/030429135ddf7c85dda38d6364ebad02.png");
var ps = {{101,282}{122,257}{189,283}{250,207}{296,110}{336,228}};
winform.button.oncommand = function(id,event){
	for(i=1;#ps;1){
		var x,y = ps[i][1],ps[i][2];
		for(n=1;..math.random(1,10);1){
			var randx=..math.random(-1,5)*10;
			var randy=..math.random(-1,5)*10;
			var randw=..math.random(5,15);
			for(i=0.2;1;0.2){
				p.drawImageF(x-randw*i+randx,y-randw*i+randy,randw*2*i,randw*2*i,meihua);
				if !..win.delay(20) break 3;
			}
		}
	}
}
winform.show();
win.loopMessage();

素材如下:

9、画个公章

        1)效果:

        2)代码:

import win.ui;
/*DSG{{*/
var winform = win.form(text="aardio form";right=680;bottom=378)
winform.add(
plus={cls="plus";left=6;top=7;right=206;bottom=207;bgcolor=16777215;z=1}
)
/*}}*/
winform.show();
import godking.paint
var p = godking.paint.fromPlus(winform.plus,true/*自动刷新plus*/);
p.textAntiAlias = true;
var font = ::LOGFONT(name="仿宋";point=20;color=0xFFFF0000;weight=700);
//画圆
p.drawEllipse(10,10,190/*x2*/,190/*y2*/,0xFFFF0000,5);
//画字
var t = "我是帅哥一枚有限公司";
var a = 20;
var n = ..string.len(t)-1;
for(i=1;n+1;1){
	p.rotateCenter(-a*n/2+(i-1)*a);
	p.drawTextF(0,15,/*x2*/,/*y2*/,..string.slice(t,i,i,true)/*文本*/,font,{0},1);
	p.resetTransform();
}
//财务专用章
p.drawTextF(0,130,/*x2*/,/*y2*/,"财务专用章"/*文本*/,font,{0},1);
//画五角星
p.drawTextF(0,60,/*x2*/,/*y2*/,"★"/*文本*/,::LOGFONT(name="宋体";point=52;color=0xFFFF0000),{0},1);
win.loopMessage();

10、画个时钟

        1)效果:

        2)代码:

import win.ui;
/*DSG{{*/
var winform = win.form(text="aardio form";right=582;bottom=531)
winform.add(
plus={cls="plus";left=37;top=17;right=537;bottom=517;z=1}
)
/*}}*/
import godking.paint
var p = godking.paint.fromPlus(winform.plus,false/*自动刷新plus*/,false);
	p.bkimg = "/beijing1.png";
var x,y,d = 242,331,160; //表盘中心点x,表盘中心点y,表盘直径(宽度、高度)
var f = function(){
		var t=time();
		p.clear();
		//画时针
		p.rotateAt(x,y,t.hour*30+30*(t.minute*60+t.second)/3600/*旋转角度*/);
		p.drawImageCenter(x,y,d,d,"/shi.png"/*图片*/);
		p.resetTransform();
		//画分针
		p.rotateAt(x,y,360*(t.minute*60+t.second)/3600/*旋转角度*/);
		p.drawImageCenter(x,y,d,d,"/fen.png"/*图片*/);
		p.resetTransform();
		//画秒针
		p.rotateAt(x,y,360*t.second/60/*旋转角度*/);
		p.drawImageCenter(x,y,d,d,"/miao.png"/*图片*/);
		p.resetTransform();
		//刷新
		p.plus.update();
	}
f();
winform.setInterval( f,1000 )
winform.show();
win.loopMessage();

源代码及相关素材打包下载:

时钟.rar - 蓝奏云

11、圆环进度条

        1)效果

        2)代码

//圆环进度条
import win.ui;
/*DSG{{*/
var winform = win.form(text="圆形进度条";right=258;bottom=258)
winform.add(
plus={cls="plus";left=3;top=4;right=256;bottom=257;bgcolor=32896;clipBk=false;notify=1;repeat="center";z=1}
)
/*}}*/
 
winform.plus.setPieRange(1,360);
winform.plus.progressPos  = 1;

winform.setInterval( 
	function(){
		winform.plus.progressPos += 1;
	},10 
)
 
//在输出图像以后,抠出圆环效果
winform.plus.onDrawForegroundEnd = function(graphics,rc){
	import godking.paint;
    var p = godking.paint.fromGraphics(graphics,rc.right,rc.bottom);
    p.textAntiAlias = true;
	
	//画出进度条
    p.rotateRect(rc,-45/*旋转角度*/);
 	p.clip.set(rc,-1/*圆角半径*/,0/*_GdipCombineModeReplace*/);
    p.fillPie(rc,0x55FFFFFF,0/*开始角*/,winform.plus.progressPos/*结束角*/);
    p.clip.set();
    p.drawEllipse(rc,0xFFFFFFFF,1); //画个圆圈去掉锯齿
    
    //画出进度文字
    p.rotateRect(rc,winform.plus.progressPos+5/*旋转角度*/);
    p.drawTextF(200,120,0/*宽度*/,0/*高度*/,..tostring(winform.plus.progressPos),
    			::LOGFONT(name="Arial";point=12;color=0xFFFFFFFF),{0},1);
	
	//画出中间头像
	p.resetTransform();
	p.rotateRect(rc,winform.plus.progressPos/*旋转角度*/);
 	rc.inflate(-(rc.width()/5),-(rc.height()/5)) ;
    p.clip.set(rc,-1/*圆角半径*/,0/*_GdipCombineModeReplace*/);
    p.drawImage(rc,"/tou.png"/*图片*/);
    p.clip.set();
    p.drawEllipse(rc,0xFFFFFFFF,1); //画个圆圈去掉锯齿
}
 
winform.show() 
win.loopMessage();
 
 

12、动画边框按钮

        1)效果

        2)代码

import win.ui;
/*DSG{{*/
var winform = win.form(text="aardio form";right=759;bottom=469)
winform.add(
plus={cls="plus";left=182;top=52;right=282;bottom=152;z=1}
)
/*}}*/

winform.show();

import godking.paint
var p = godking.paint.fromPlus(winform.plus,false/*自动刷新plus*/)
	p.bkcolor=0xFFFFFFFF

var rect = ::RECT(1,1,100,100)
var rect1 = ::RECT(1,1,100,100).inflate(-3,-3)

var path = ..gdip.path(1/*_FillModeWinding*/)
var path1 = ..gdip.path(1/*_FillModeWinding*/)
path.addRoundRect(rect,20)
path1.addRoundRect(rect1,17)

var i=0
winform.plus.setInterval( 
	function(){
		i+=3;
		p.clear()
		p.clip.set(path/*path*/,0/*_GdipCombineModeReplace区域相交模式*/)
		p.clip.set(path1/*path*/,4/*_CombineModeExclude*/)
		p.rotateRect(rect,i/*旋转角度*/)
		p.drawImage(::RECT(1,1,100,100).inflate(20,20),"C:\Users\Administrator\Desktop\Stroke_animation.png"/*图片*/)
		p.clip.set()
		p.resetTransform()
		p.drawRoundRect(rect,20/*圆角半径*/,0xFFFFFFFF,1)
		p.drawRoundRect(rect1,17/*圆角半径*/,0xFFFFFFFF,1)
		p.drawImage(::RECT(1,1,100,80).inflate(-25,-15),"C:\Users\Administrator\Desktop\icon_detect_system.png"/*图片*/)
		p.drawText(::RECT(1,60,100,100),"系统设置"/*文本*/,::LOGFONT(name="宋体";point=10;color=0xFF55AA55),{0},1/*水平对齐0左1中2右*/,1/*垂直对齐0顶1中2底*/)
		p.plus.update();
		..win.delay();
	},30
)
win.loopMessage();

        3)相关素材

Stroke_animation.png
icon_detect_system.png

13、画水印

        1)效果

        2)代码

import win.ui;
/*DSG{{*/
var winform = win.form(text="aardio form";right=759;bottom=469)
winform.add(
plus={cls="plus";left=40;top=40;right=710;bottom=430;foreRepeat="scale";z=1}
)
/*}}*/
winform.show();
//导入paint库
import godking.paint
//创建画板,载入原图
var p=godking.paint.fromBitmap("\原图.jpg");
//在右下角画图片水印
p.drawImageF(p.width-500,p.height-500,500,500,"\水印图.png"/*图片*/,0.6/*透明度或图片属性*/)
//在左上角画文字水印
p.drawTextF(0,0,,,"光庆水印",::LOGFONT(name="黑体";point=200;color=0x33FFFFFF),0,0,0);
//图片显示
winform.plus.foreground = p.bitmap;
win.loopMessage();

14、窗口时钟图标

        1)效果

仔细观察,能看到窗口和任务栏图标中,时钟指针是在随着时间实时转动的。当然,这只是一个小应用,用图标实时显示时间。其他应用场景比如实时电量、实时进度等,都可以用此法实现。

         2)代码

本代码在时钟基础上,只加一句代码即可:

winform.setIcon(p.getIconHandle(,))

import win.ui;
/*DSG{{*/
var winform = win.form(text="aardio form";right=582;bottom=531)
winform.add(
plus={cls="plus";left=37;top=17;right=537;bottom=517;z=1}
)
/*}}*/

import godking.paint
var p = godking.paint(winform.plus.width,winform.plus.height,,"/beijing.png")
p.plus.bind(winform.plus,false/*自动刷新*/,true/*重绘背景*/)
var f = function(){
		var t=time()
		p.clear()
		//画时针
		var a = t.hour*30+30*(t.minute*60+t.second)/3600;
		p.rotateCenter(a);
		p.drawImageF(0,0,p.width/*宽度*/,p.height/*高度*/,"/shi.png"/*图片*/);
		p.resetTransform();
		//画分针
		a = 360*(t.minute*60+t.second)/3600;
		p.rotateCenter(a);
		p.drawImageF(0,0,p.width/*宽度*/,p.height/*高度*/,"/fen.png"/*图片*/);
		p.resetTransform();
		//画秒针
		a = 360*t.second/60;
		p.rotateCenter(a);
		p.drawImageF(0,0,p.width/*宽度*/,p.height/*高度*/,"/miao.png"/*图片*/);
		p.resetTransform();
		//刷新
		p.plus.update();
		winform.setIcon(p.getIconHandle(,/*高度*/));
	}
f();
winform.setInterval( f,1000 )
winform.show();
win.loopMessage();

15、阴影渐变文字

        1)效果

        2)代码

import win.ui;
/*DSG{{*/
var winform = win.form(text="aardio form";right=582;bottom=531)
winform.add(
plus={cls="plus";left=37;top=17;right=537;bottom=517;z=1}
)
/*}}*/

import godking.paint
var p = godking.paint.fromPlus(winform.plus,true/*自动刷新*/,false/*重绘背景*/)
//创建影线画刷
var b = p.brush.hatchBrush(10/*笔刷风格0-52*/,0xFF000000/*前景色*/,0xFFFFFFFF/*背景色*/)
//用画刷绘制影线文字
var font = ::LOGFONT(name="黑体";point=120;color=0xFFFF0000;brush=b)
p.drawText(,/*y1*/,/*x2*/,/*y2*/,"阴影文字",font,0,0,0)
//创建线性渐变画刷
colors = {0xFFFF0000,0xFF00FF00,0xFF0000FF,0xFF00FFFF,0xFFFFFF00,0xFFFF00FF}
points = {0,0.2,0.5,0.7,0.8,1}
b = p.brush.lineBrush({1,1}/*起始坐标*/,{200,200}/*结束坐标*/,colors/*颜色数组*/,points/*位置数组*/,/*包围模式wrapMode*/)
//用画刷绘制线性渐变文字
font.brush = b
p.drawText(-5,-5/*y1*/,/*x2*/,/*y2*/,"阴影文字",font,0,0,0)

winform.show();
win.loopMessage();

16、倒影文字

        1)效果

        2)代码

import win.ui;
/*DSG{{*/
var winform = win.form(text="aardio form";right=582;bottom=305)
winform.add(
plus={cls="plus";left=37;top=17;right=537;bottom=305;z=1}
)
/*}}*/

import godking.paint
var p = godking.paint.fromPlus(winform.plus,true/*自动刷新*/,false/*重绘背景*/)
var font = ::LOGFONT(name="黑体";point=60;color=0xFFFF0000;brush=b)
p.drawText(0,0/*y1*/,0/*x2*/,100/*y2*/,"倒影文字",font,0,0,2)
p.scale(1 /*宽度缩放比例*/,-1/*高度缩放比例*/,0/*选项*/) 
font.color = 0xFFBBBBBB
p.drawText(0,-150/*y1*/,0/*x2*/,-50/*y2*/,"倒影文字",font,0,0,2)
winform.show();
win.loopMessage();

17、描边文字

        1)效果

        2)代码

import win.ui;
/*DSG{{*/
var winform = win.form(text="aardio form";right=759;bottom=469;)
winform.add(
plus={cls="plus";left=192;top=56;right=492;bottom=356;frame=1;z=1;};

)
/*}}*/
winform.show();
import godking.paint;
var p = godking.paint.fromPlus(winform.plus,true/*自动刷新*/,false/*重绘背景*/);
var path = p.path( 1 /*0 交叉填充 1 全填充*/);
path.addTextF(,,,,"我",::LOGFONT(name="黑体";h=130;),0,1,1);
p.drawPath(path,0xFFFFFF00/*线条颜色或pen对象*/,10/*线宽*/,/*线型*/);
p.fillPath(path,0xFFFF0000/*填充颜色或brush对象*/);
path.delete();
win.loopMessage();

18、发光文字

1)效果

2)代码

import win.ui;
/*DSG{{*/
var winform = win.form(text="aardio form";right=759;bottom=469;)
winform.add(
plus={cls="plus";left=192;top=56;right=492;bottom=356;z=1;};

)
/*}}*/
winform.show();
import godking.paint;
//生成一个模糊图像作为背景
var p = godking.paint(300,300)
var path = p.path( 1 /*0 交叉填充 1 全填充*/);
path.addTextF(0,0,300,300,"我",::LOGFONT(name="黑体";h=130),0,1,1);
p.drawPath(path,0xFFFFFFFF/*线条颜色或pen对象*/,10/*线宽*/,/*线型*/);
path.delete();
p.effect.blur(10, true, ::RECT(0,0,300,300));
p.rotateBitmap(1/*_Rotate90FlipNone*/);
p.effect.blur(10, true, ::RECT(0,0,300,300));
p.rotateBitmap(3/*_Rotate270FlipNone*/);
var b = p.bitLock();
for(i=1;#b.bitData;4){
	b.bitData[i] = 0xFF;
	b.bitData[i+1] = 0x00;
	b.bitData[i+2] = 0xFF;
}
b.unlock();
//将模糊背景写入,在上面再写文字
var pp = godking.paint.fromPlus(winform.plus,true/*自动刷新*/,false/*重绘背景*/);
pp.clear(0xFFFFFFFF/*颜色*/)
pp.drawImage(0,0/*y1*/,300/*x2*/,300/*y2*/,p.bitmap/*图片*/,/*透明度或图片属性*/,/*保持比例*/)
pp.drawTextF(,,,,"我",::LOGFONT(name="黑体";h=130;color=0xFFFF0000),0,1,1);
//释放图像
p.close();
pp.close();
win.loopMessage();

19、图片变形

1)效果

2)代码

import win.ui;
/*DSG{{*/
var winform = win.form(text="aardio form";right=631;bottom=431;)
winform.add(
plus={cls="plus";left=8;top=8;right=308;bottom=208;bgcolor=8388736;z=1;};
plus2={cls="plus";left=320;top=8;right=620;bottom=208;bgcolor=8388736;z=2;};
plus3={cls="plus";left=8;top=224;right=308;bottom=424;bgcolor=8388736;z=3;};
plus4={cls="plus";left=320;top=224;right=620;bottom=424;bgcolor=8388736;z=4;};

)
/*}}*/

winform.show();
import godking.paint
var p = godking.paint(500,400)
p.drawImagePoints4("E:\壁纸\1 (7).jpg",10,50,250,10,50,150,280,180)
winform.plus.foreground = p.getBuffer("*.png",100/*JPG质量*/,/*截取区域RECT或RECTF*/,/*宽度*/,/*高度*/,/*按比例*/,/*参数*/)

p.clear(/*颜色*/)
p.drawImagePoints4("E:\壁纸\1 (7).jpg",50,50,250,10,50,200,80,80)
winform.plus2.foreground = p.getBuffer("*.png",100/*JPG质量*/,/*截取区域RECT或RECTF*/,/*宽度*/,/*高度*/,/*按比例*/,/*参数*/)

p.clear(/*颜色*/)
p.drawImagePoints4("E:\壁纸\1 (7).jpg",0,0,150,20,300,150,150,200)
winform.plus3.foreground = p.getBuffer("*.png",100/*JPG质量*/,/*截取区域RECT或RECTF*/,/*宽度*/,/*高度*/,/*按比例*/,/*参数*/)

p.clear(/*颜色*/)
p.drawImagePoints4("E:\壁纸\1 (7).jpg",0,0,150,120,150,200,300,0)
winform.plus4.foreground = p.getBuffer("*.png",100/*JPG质量*/,/*截取区域RECT或RECTF*/,/*宽度*/,/*高度*/,/*按比例*/,/*参数*/)

win.loopMessage();

3)翻书动画效果

4)翻书动画代码

import win.ui;
/*DSG{{*/
var winform = win.form(text="aardio form";right=319;bottom=327;)
winform.add(
plus={cls="plus";left=8;top=8;right=308;bottom=308;bgcolor=16777215;z=1;};

)
/*}}*/

winform.show();
import godking.paint
import godking.motion;
var p = godking.paint(300,300);
import inet.http;
var pic = inet.http.get("https://img.duoziwang.com/2017/03/17/B0266.jpg")
var pic2= inet.http.get("https://img.duoziwang.com/2017/03/17/B0269.jpg")
var x1,x2=0,0;
var y = 0;
while(x2<300){
    if x1<300 x1+=20;
    if x1>20 x2+=20;
    var y;
    if x1<=150 y = godking.motion("4-"/*缓动类型*/, false/*是否按值*/, 0/*开始值*/, 7/*结束值*/, x1/150/*当前值或进度*/);
    elseif x1>150 y = godking.motion("4+"/*缓动类型*/, false/*是否按值*/, 7/*开始值*/, 0/*结束值*/, (x1-150)/150/*当前值或进度*/);
    p.clear(/*颜色*/);
    p.drawImagePoints4(pic2,0,50,150,50,0,200,150,200);
    p.drawImagePoints4(pic,x1,50-y*y,150,50,x2,200+y*3,150,200);
    p.drawText(0,250/*y1*/,/*x2*/,/*y2*/,"光庆 —— 翻书动画示例",::LOGFONT(name="宋体";h=16;color=0xFFFF0000;),0/*格式*/,1/*水平*/,0/*垂直*/)
    winform.plus.foreground = p.getBuffer("*.png");
    win.delay(1);
    if x2=300 {
        x1=-20;
        x2=0;
        if !win.delay(1000) {
            win.quitMessage();
            break;
        }
    }
    if x1=0 win.delay(1000);
}
win.loopMessage();

20、图片高级转场效果

1)效果

2)代码

import win.ui;
/*DSG{{*/
var winform = win.form(text="aardio form";right=815;bottom=663)
winform.add(
button={cls="button";text="开始";left=688;top=616;right=792;bottom=656;z=2};
combobox={cls="combobox";left=24;top=624;right=272;bottom=648;edge=1;items={};mode="dropdownlist";z=5};
plus={cls="plus";left=8;top=8;right=808;bottom=608;frame=1;z=1};
static={cls="static";text="速度";left=424;top=624;right=472;bottom=648;font=LOGFONT(h=-16);transparent=1;z=4};
trackbar={cls="trackbar";left=464;top=616;right=600;bottom=646;max=30;min=5;pos=15;z=3}
)
/*}}*/

import godking.paint;
var paint = godking.paint.fromPlus(winform.plus,false/*自动刷新*/,false/*重绘背景*/);
var imga = ..gdip.bitmap("/a.png");
var imgb = godking.paint.fromBitmap("/b.png");
paint.drawImageF(0,0/*y*/,800/*宽*/,600/*高*/,imga/*图片*/,/*透明度或图片属性*/,/*保持比例*/);
paint.saveBitmapToCache();
for(i=1;8;1){ winform.combobox.add( "/转场 ("+i+").jpg") };
winform.combobox.selIndex = 1;
winform.button.oncommand = function(id,event){
	winform.button.disabledText = {"✶";"✸";"✹";"✺";"✹";"✷"};
	var p = godking.paint.fromBitmap(winform.combobox.text);
	var bitp = p.lockBit(32);
	var datap = bitp.bitData;
	//按透明度循环绘制
	for(alpha=255;-30;-winform.trackbar.pos){
		//载入缓存图片1
		paint.loadBitmapFromCache();
		//处理图片2
		var bit2 = imgb.lockBit(32);
		var data2 = bit2.bitData;
		for(i=1;800*600;1){
			if datap[i*4-3] >= alpha data2[i*4]=0xFF;
			else data2[i*4]=0x00;
		}
		bit2.unlock();
		//画图片2
		paint.drawImageF(0,0/*y*/,800/*宽*/,600/*高*/,imgb.bitmap/*图片*/,/*透明度或图片属性*/,/*保持比例*/);
		paint.plus.update();
		win.delay();
		if alpha<=0 break;
	}
	bitp.unlock();
	p.close();
	winform.button.disabledText = null;
}
winform.show();
win.loopMessage();

素材文件下载:https://aardio.online/thread-378.htm

  • 12
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
内存画板,在内存中创建一个画板并画图。 2.0到2.5版本: ◆内存画板增加了画板添加路径,路径或区域转换为剪裁区,剪裁区的基本操作,结合剪裁区的应用可以画出更多图形。 如果画弦、饼、圆弧、弧线之后,可以获取弧线的两个端点的坐标。 增加“画圆弧路径文字()”,可以画出按照圆弧排列的文字 ◆新增类“图片对象”和“ICO图标类” ◆增加子程序:_计算直线角度()、_计算直线的终点()、_计算两点间的距离()、_计算两条直线的交点()。 _计算直线的终点() 需要提供{起点,长度,角度},计算出终点,可以当做计算圆上某一点{圆心,半径,角度} 2.5到3.0版本: ◆新增类“动态矢量画板”,画出的图形可以随着鼠标滚轮滚动放大缩小 画出的形状支持半透明颜色(画笔颜色、刷子颜色、文本颜色为ARGB颜色) 增加更多的命令,可设置Y轴正方向是向上还是向下。 ◆新增类“图片窗口类”,可在“图片窗口示例.e”预览效果。 ◆新增子程序:_计算点到线段的最短距离()、_计算点到直线的垂点距离()、_计算椭圆上的一点()、置窗口透明度_()。 附送一个(源码分享)用内存画板为主体创建的表格类。 3.0到3.5版本:修复部分bug。 ◆内存画板和动态矢量画板增加了  旋转指定角度画图()、旋转角度复位()和画闭合曲线() ◆类“图片对象”增加了  取出图片数据()、旋转()、设置某颜色透明()等更多命令; ◆新增子程序:计算贝塞尔曲线控制点()、计算贝塞尔曲线控制点_X()、_计算对称点()、_计算某点绕一个坐标旋转() 只需要提供贝塞尔曲线的顶点,可计算出曲线的控制点,直接用计算结果的数组画贝塞尔曲线即可 3.5到4.0版本: ◆内存画板新增  写出W()、写文本行W()、定位写出W()等Unicode文本处理命令(感谢网友“xxdahai”提供Unicode文本处理的源码) 画图片_倾斜变换()、取文字间距()、设置文字间距()、画笔类型_2()、刷子类型_图案()等命令 ◆类“图片对象”增加了   设置某颜色透明_2()、添加图片对象()、取位图句柄() ◆新增子程序:计算图片旋转后的尺寸()、_计算三角形的重心()、_计算坐标组缩放()、_计算坐标组缩放_X() 4.0到5.0版本: ◆内存画板新增  画繁花曲线()、画玫瑰曲线()、画蝴蝶曲线() 画图片_切图效果()包含55个效果(感谢网友“琪诺兔”提供的图片转场效果的源码) ◆新增类“图片编辑类”,结合命令“内存画板.画图片_裁剪”或“图片对象.编辑图片”使用 ◆类“图片对象”增加了  编辑图片()、取图片透明区域()、设置区域内透明()等更多编辑命令 ◆新增子程序:_计算点与圆的切点()、_计算三角形外接圆的圆心半径()、_计算直线与圆的交点() 5.0到6.0版本: ◆内存画板新增  图片优化模式()、合并分层画板()、空间坐标变换() ◆新增类“分层画板”,透明画板,更加丰富的画笔画刷设置 类“图片对象”增加了  转换分层画板() 6.0到7.0版本:修复部分bug ◆分层画板增加了  取当前路径()、路径_添加路径()、路径曲线转为线段()、路径_均分路径()、路径_混合路径()等一些路径操作命令 内存画板和分层画板增加了  画图片_扭曲变形() ◆类“图片对象”增加了  创建自位图句柄();类“动态矢量画板”增加了  图形是否显示()、取图形类型()、取图形顶点坐标() 命令“取图形顶点坐标()”提示:如果取圆弧的顶点只取回3个坐标,可以用“_计算三角形外接圆的圆心半径()”命令还原 ◆新增子程序:计算XFORM_指定点旋转()、计算XFORM_指定点缩放()、计算XFORM_指定点倾斜()、取坐标数组范围()、变换坐标组() 7.0到8.0版本: ◆内存画板新增  画图片_倾斜到坐标(),命令“画图片_切图效果”从类中移出为“画图片_转场过渡效果” ◆分层画板增加了  创建_场景句柄()、置灰度图蒙版()、画图片_倾斜到坐标() 类“图片对象”新增  取图像格式()、取各帧延时()、置灰度图蒙版() ◆新增类“APNG解析类”和“多帧图片对象”,多帧图片对象可以合成GIF图片、TIF图片、APNG动画图片(PNG的位图动画格式,属于PNG格式的扩展) ◆新增子程序:_计算三维坐标旋转()、偏移坐标组()、坐标_3D到2D()、坐标_2D到3D() 8.0到9.0版本: ◆分层画板增加了  创建_图片句柄()、画出图元文件()、路径_扩展外观()、路径到区域()、判断坐标与路径的关系() 内存画板新增  画出图元文件();类“图片对象”新增  去除黑底() ◆优化动态矢量画板,如果创建时背景色为 #透明,可作为类似图层的动态画板,将动态矢量画板复制到内存画板可以调用“合并分层画板
内存画板,在内存中创建一个画板并画图。 2.0到2.5版本: ◆内存画板增加了画板添加路径,路径或区域转换为剪裁区,剪裁区的基本操作,结合剪裁区的应用可以画出更多图形。     如果画弦、饼、圆弧、弧线之后,可以获取弧线的两个端点的坐标。     增加“画圆弧路径文字()”,可以画出按照圆弧排列的文字 ◆新增类“图片对象”和“ICO图标类” ◆增加子程序:_计算直线角度()、_计算直线的终点()、_计算两点间的距离()、_计算两条直线的交点()。     _计算直线的终点() 需要提供{起点,长度,角度},计算出终点,可以当做计算圆上某一点{圆心,半径,角度} 2.5到3.0版本: ◆新增类“动态矢量画板”,画出的图形可以随着鼠标滚轮滚动放大缩小     画出的形状支持半透明颜色(画笔颜色、刷子颜色、文本颜色为ARGB颜色)     增加更多的命令,可设置Y轴正方向是向上还是向下。 ◆新增类“图片窗口类”,可在“图片窗口示例.e”预览效果。 ◆新增子程序:_计算点到线段的最短距离()、_计算点到直线的垂点距离()、_计算椭圆上的一点()、置窗口透明度_()。 附送一个(源码分享)用内存画板为主体创建的表格类。 3.0到3.5版本:修复部分bug。 ◆内存画板和动态矢量画板增加了  旋转指定角度画图()、旋转角度复位()和画闭合曲线() ◆类“图片对象”增加了  取出图片数据()、旋转()、设置某颜色透明()等更多命令; ◆新增子程序:计算贝塞尔曲线控制点()、计算贝塞尔曲线控制点_X()、_计算对称点()、_计算某点绕一个坐标旋转()     只需要提供贝塞尔曲线的顶点,可计算出曲线的控制点,直接用计算结果的数组画贝塞尔曲线即可 3.5到4.0版本: ◆内存画板新增  写出W()、写文本行W()、定位写出W()等Unicode文本处理命令(感谢网友“xxdahai”提供Unicode文本处理的源码)     画图片_倾斜变换()、取文字间距()、设置文字间距()、画笔类型_2()、刷子类型_图案()等命令 ◆类“图片对象”增加了   设置某颜色透明_2()、添加图片对象()、取位图句柄() ◆新增子程序:计算图片旋转后的尺寸()、_计算三角形的重心()、_计算坐标组缩放()、_计算坐标组缩放_X() 4.0到5.0版本: ◆内存画板新增  画繁花曲线()、画玫瑰曲线()、画蝴蝶曲线()     画图片_切图效果()包含55个效果(感谢网友“琪诺兔”提供的图片转场效果的源码) ◆新增类“图片编辑类”,结合命令“内存画板.画图片_裁剪”或“图片对象.编辑图片”使用 ◆类“图片对象”增加了  编辑图片()、取图片透明区域()、设置区域内透明()等更多编辑命令 ◆新增子程序:_计算点与圆的切点()、_计算三角形外接圆的圆心半径()、_计算直线与圆的交点() 5.0到6.0版本: ◆内存画板新增  图片优化模式()、合并分层画板()、空间坐标变换() ◆新增类“分层画板”,透明画板,更加丰富的画笔画刷设置     类“图片对象”增加了  转换分层画板() 6.0到7.0版本:修复部分bug ◆分层画板增加了  取当前路径()、路径_添加路径()、路径曲线转为线段()、路径_均分路径()、路径_混合路径()等一些路径操作命令     内存画板和分层画板增加了  画图片_扭曲变形() ◆类“图片对象”增加了  创建自位图句柄();类“动态矢量画板”增加了  图形是否显示()、取图形类型()、取图形顶点坐标()     命令“取图形顶点坐标()”提示:如果取圆弧的顶点只取回3个坐标,可以用“_计算三角形外接圆的圆心半径()”命令还原 ◆新增子程序:计算XFORM_指定点旋转()、计算XFORM_指定点缩放()、计算XFORM_指定点倾斜()、取坐标数组范围()、变换坐标组() 7.0到8.0版本: ◆内存画板新增  画图片_倾斜到坐标(),命令“画图片_切图效果”从类中移出为“画图片_转场过渡效果” ◆分层画板增加了  创建_场景句柄()、置灰度图蒙版()、画图片_倾斜到坐标()     类“图片对象”新增  取图像格式()、取各帧延时()、置灰度图蒙版() ◆新增类“APNG解析类”和“多帧图片对象”,多帧图片对象可以合成GIF图片、TIF图片、APNG动画图片(PNG的位图动画格式,属于PNG格式的扩展) ◆新增子程序:_计算三维坐标旋转()、偏移坐标组()、坐标_3D到2D()、坐标_2D到3D() 8.0到9.0版本: ◆分层画板增加了  创建_图片句柄()、画出图元文件()、路径_扩展外观()、路径到区域()、判断坐标与路径的关系()     内存画板新增  画出图元文件();类“图片对象”新增  去除黑底() ◆优化动态矢量画板
内存画板,在内存中创建一个画板并画图。 2.0到2.5版本: ◆内存画板增加了画板添加路径,路径或区域转换为剪裁区,剪裁区的基本操作,结合剪裁区的应用可以画出更多图形。     如果画弦、饼、圆弧、弧线之后,可以获取弧线的两个端点的坐标。     增加“画圆弧路径文字()”,可以画出按照圆弧排列的文字 ◆新增类“图片对象”和“ICO图标类” ◆增加子程序:_计算直线角度()、_计算直线的终点()、_计算两点间的距离()、_计算两条直线的交点()。     _计算直线的终点() 需要提供{起点,长度,角度},计算出终点,可以当做计算圆上某一点{圆心,半径,角度} 2.5到3.0版本: ◆新增类“动态矢量画板”,画出的图形可以随着鼠标滚轮滚动放大缩小     画出的形状支持半透明颜色(画笔颜色、刷子颜色、文本颜色为ARGB颜色)     增加更多的命令,可设置Y轴正方向是向上还是向下。 ◆新增类“图片窗口类”,可在“图片窗口示例.e”预览效果。 ◆新增子程序:_计算点到线段的最短距离()、_计算点到直线的垂点距离()、_计算椭圆上的一点()、置窗口透明度_()。 附送一个(源码分享)用内存画板为主体创建的表格类。 3.0到3.5版本:修复部分bug。 ◆内存画板和动态矢量画板增加了  旋转指定角度画图()、旋转角度复位()和画闭合曲线() ◆类“图片对象”增加了  取出图片数据()、旋转()、设置某颜色透明()等更多命令; ◆新增子程序:计算贝塞尔曲线控制点()、计算贝塞尔曲线控制点_X()、_计算对称点()、_计算某点绕一个坐标旋转()     只需要提供贝塞尔曲线的顶点,可计算出曲线的控制点,直接用计算结果的数组画贝塞尔曲线即可 3.5到4.0版本: ◆内存画板新增  写出W()、写文本行W()、定位写出W()等Unicode文本处理命令(感谢网友“xxdahai”提供Unicode文本处理的源码)     画图片_变换()、取文字间距()、设置文字间距()、画笔类型_2()、刷子类型_图案()等命令 ◆类“图片对象”增加了   设置某颜色透明_2()、添加图片对象()、取位图句柄() ◆新增子程序:计算图片旋转后的尺寸()、_计算三角形的重心()、_计算坐标组缩放()、_计算坐标组缩放_X() 4.0到5.0版本: ◆内存画板新增  画繁花曲线()、画玫瑰曲线()、画蝴蝶曲线()     画图片_切图效果()包含55个效果(感谢网友“琪诺兔”提供的图片转场效果的源码) ◆新增类“图片编辑类”,结合命令“内存画板.画图片_裁剪”或“图片对象.编辑图片”使用     类“图片对象”增加了  编辑图片()、取图片透明区域()、设置区域内透明()等更多编辑命令 ◆新增子程序:_计算点与圆的切点()、_计算三角形外接圆的圆心半径()、_计算直线与圆的交点() 5.0到6.0版本: ◆内存画板新增  图片优化模式()、合并分层画板()、空间坐标变换() ◆新增类“分层画板”,透明画板,更加丰富的画笔画刷设置     类“图片对象”增加了  转换分层画板()
GDI(图形设备接口)是一种在Windows操作系统中使用的绘图API(应用程序编程接口),它提供了一系列函数和工具,用于在屏幕上绘制图形和处理图形数据。GDI内存画板是指在内存中创建一个虚拟的画板,通过GDI函数对其进行操作来实现绘图功能。 使用GDI内存画板可以很方便地实现画矩形并进行大小调节的功能。首先,我们可以使用GDI提供的函数在内存画板上创建一个矩形。例如,使用Rectangle函数可以指定矩形的位置、大小和边框颜色等属性。然后,可以使用GDI函数设置矩形的填充颜色,例如使用SetBkColor函数设置背景色。接下来,我们可以使用InvalidateRect函数来刷新矩形的显示状态,使其在画板上显示出来。 为了实现矩形的大小调节功能,可以使用鼠标事件来监测鼠标在画板上的操作。例如,鼠标按下、移动和释放事件可以被检测到,并通过GDI函数来相应地调整矩形的大小。在鼠标按下时,可以记录下鼠标位置和矩形的初始大小。在鼠标移动时,可以根据鼠标位置的变化来计算矩形的新位置和大小,并更新矩形的显示。最后,在鼠标释放时,可以完成矩形的大小调节操作。 总之,通过GDI内存画板和相应的函数和事件处理,我们可以方便地实现画矩形并进行调节的功能。这为我们提供了一种强大的工具来创建自定义的图形界面和图形处理应用程序。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卢光庆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值