录音/制作/创作 吉他 扩声技术 视频技术 作品展示 生活 信息 更多... | 音频应用专卖店

[教程] 简谱软件开发技术基础(矢量图篇)

( 19 )
12
 
[收藏]
-  第 1 页  -
#1 10-1-5 11:32

简谱软件开发技术基础(矢量图篇)


98
矢量图,也称为面向对象的图像或绘图图像,在数学上定义为一系列由线连接的点。矢量文件中的图形元素称为对象。每个对象都是一个自成
矢量图 示例
一体的实体,它具有颜色、形状、轮廓、大小和屏幕位置等属性。矢量图可以在维持它原有清晰度和弯曲度的同时,多次移动和改变它的属性,而不会影响图例中的其它对象。这些特征使基于矢量的程序特别适用于图例和三维建模,因为它们通常要求能创建和操作单个对象。基于矢量的绘图同分辨率无关。这意味着它们可以按最高分辨率显示到输出设备上。
  矢量图与位图最大的区别是,它不受分辨率的影响。因此在印刷时,可以任意放大或缩小图形而不会影响出图的清晰度。
[编辑本段]主要特点

  矢量图的优点

  (1)文件小;
  (2)图像元素对象可编辑;
  (3)图像放大或缩小不影响图像的分辨率;
  (4)图像的分辨率不依赖于输出设备;

做个通俗的比喻来说:在一个画家画画的时候,旁边有一台摄像机,把画家整个画画的过程摄制下来了。这个画家画的这张画,可以认为是普通的图形文件(位图)。摄像机录制画家画画的过程的录像带,就是矢量图。那么怎么把这个矢量图最终转化成位图呢,找个机械手,让机械手根据录像带的内容重新画一次。就能得到一张新的画(位图)了。

看看这段代码
case WM_CREATE://录制过程
          hdcEMF = CreateEnhMetaFile (NULL, NULL, NULL, NULL) ;

          Rectangle (hdcEMF, 100, 100, 200, 200) ;

          MoveToEx  (hdcEMF, 100, 100, NULL) ;
          LineTo    (hdcEMF, 200, 200) ;

          MoveToEx  (hdcEMF, 200, 100, NULL) ;
          LineTo    (hdcEMF, 100, 200) ;

          hemf = CloseEnhMetaFile (hdcEMF) ;
          return 0 ;

     case WM_PAINT://回放过程
          hdc = BeginPaint (hwnd, &ps) ;

          GetClientRect (hwnd, &rect) ;

          rect.left   =     rect.right  / 4 ;
          rect.right  = 3 * rect.right  / 4 ;
          rect.top    =     rect.bottom / 4 ;
          rect.bottom = 3 * rect.bottom / 4 ;

          PlayEnhMetaFile (hdc, hemf, &rect) ;//回放

          EndPaint (hwnd, &ps) ;
那么 简谱软件为什么需要矢量图功能呢?
       1 提高输出图像的精度。 举个例子, 我的显示器 精度为72dpi(dot per inch), 我的hp激光打印机的默认打印精度为600dpi。两个文件,一个位图文件,一个矢量图件。在屏幕上都显示为1 英寸长的线段。 打印这两个线段。你就会发现。位图文件打印出来的线段变短了,只有 72/600 英寸长了, 但矢量图文件打印出来的还是1 英寸。这是为什么呢, 我们来看看这两个文件的内部是怎么记录这两个线段的。
       位图: (0,0, 黑色),(0, 1, 黑色),...(0, 72, 黑色)
       矢量图: 0.01英寸比例  LINE( 1线宽, 黑色线色,(0,0)起点, (0,100)终点

      打印机在打印位图文件的时候,忠实的打印出了72个点(由于打印机的每个点只有1/600英寸大小,所以整个线段的最终长度就只有72/600了),为了打印出1英寸的线段,就只能把这个位图放大600/72倍,那么原来紧挨着的两个点(0,0,黑色)和(0,1,黑色)变成了(0,0,黑色)和(0, 8, 黑色)。 这样就需要在这两个点间插入7个点。这涉及到插值算法。目前的插值算法,对直线还凑合,稍微复杂一点的,就差强人意了。大家可以用位图软件(mspaint, photoshop etc) 画一个圆,然后放大10倍,看看效果就明白了。
     而 在打印矢量图的时候,打印机会根据矢量图里的  单位线的起点终点信息,计算出需要打印600个墨点,从而取得较好的打印效果

     2 有利于在其他矢量图软件里编辑

      从上面可以看出,位图文件是以点为单位的。 而矢量图是以图元为单位(比如一个线段,一个圆), 比如如果发现音符和三连音粘在一起了,需要将三连音线移动一点,在位图编辑工具中,要选中和移动这个线比在矢量编辑软件中困难很多。具体大家在相应的工具中试试就知道了。

怎么生成一个矢量图文件?
    其实,我们目前所有见到的简谱软件,在内存里,都是矢量形式的。只有在向屏幕输出的那一刻才转换成位图。保存一个矢量文件,也是一件很简单的事。首先用Windows API创建一个空的矢量文件(通常以emf为扩展名),然后把这个文件当成一种输出设备, 程序把向屏幕的输出动作(划线,输出字符串等)对着这个文件重做一次。然后保存。就是这么简单。

[ 本帖最后由 三叶虫 于 10-1-9 17:13 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
观众反应
CLJ

1436
#2 10-1-5 11:51
学习中,并期待下篇

这个太深奥了,哈

[ 本帖最后由 libaiping 于 10-1-5 11:53 编辑 ]

6593
#3 10-1-5 12:04
教程真才實料

有意開發制譜程序者真的必先了解矢量和位圖的區別與作用,以免程序開發規畫方向不當,突勞一場。
程序運作要矢量之外,轉檔、打印也必需是矢量。

江振興 台灣 20100105  12 : 05

98
#4 10-1-5 12:14
写代码我在行。教材嘛,确实勉为其难。兄弟那块不明白的地方。我争取用浅显的文字说明白。我的目的是希望能给有志于开发简谱软件的朋友做一些技术普及,让他们少走一些弯路。同时也少一些无知无畏的人。
观众反应

1436
#5 10-1-5 12:17
原帖三叶虫 于 10-1-5 12:14 发表
写代码我在行。教材嘛,确实勉为其难。兄弟那块不明白的地方。我争取用浅显的文字说明白。我的目的是希望能给有志于开发简谱软件的朋友做一些技术普及,让他们少走一些弯路。同时也少一些无知无畏的人。


暂时开发能力达不到,有机会深造下,掌握到一定知识后再向您请教学习,呵

[ 本帖最后由 libaiping 于 10-1-5 14:26 编辑 ]

79
#6 10-1-5 13:47
太强了!请问!三夜老大!您用的是什么编程语言啊??

98
#7 10-1-5 17:22
上面贴的一段代码是标准C和Windows API。一般来说用C++, C#, Java开发简谱软件,可能会更好一些

[ 本帖最后由 三叶虫 于 10-1-5 17:26 编辑 ]

259
#8 10-1-5 19:06
提示: 作者被禁止或删除 内容自动屏蔽

863
#9 10-1-5 23:31
认真拜读了各位大作 学习了 领教了

13894
#10 10-1-6 00:32
原帖qwozhs 于 10-1-5 19:06 发表
已有百家争鸣,又显百花齐放。好。看来现任版主的默默努力初见成效。
网上东拼西凑编教程也不容易,理解。如已脱稿,敢请加快发稿周期。连载完后,盼有基础篇——面向对象编程中,对象的概念;中级篇——图层技术, ...



请你好好说话。不然我要删贴了。你的不少贴子都是这种口气。

如果对我有意见,请闷着别说出来。

812
#11 10-1-6 03:22
真的很期待一款好的简谱软件出现。

259
#12 10-1-7 16:45
提示: 作者被禁止或删除 内容自动屏蔽

751
#13 10-1-8 12:09
开源世界如此精彩,只要有心,我们会找到各种各样的软件,里面包含了所有我们需要的所有技术。比如图形图像这一块,就有最常见的gimp(基于像素,类似photoshop),inkscape(基于矢量,类似illustrator),不论是简谱还是五线谱软件,都是些2d的图形而已。在这个过程中会遇到大量的事实上的国际新标准,会发现我们遇到的问题,其实老外早已经解决了。
如果要求对口,音乐类的也有,制谱软件lilypond(标杆,但很少有人会用它,因为不是所见即所得的),musescore(正在膜拜中。。。),tuxguitar(模仿guitar pro),音乐制作工具ardour(模仿nuendo)。。。
只是要想搞明白这些软件,必须要越过n座大山才行:
1、英语关:这个大家都理解。
2、语言关:开源软件语言多样,只会用C是不行的。
3、开发环境关:开源软件的各种库依赖看到让人吐血,不过没办法,一个都不能少,否则无法编译。
4、操作系统关:开源的世界不是只有windows,世界上搞软件的也不是只有微软。

[ 本帖最后由 vanferry 于 10-1-8 04:15 编辑 ]
观众反应
:专家就是专家,呵,太有技术含量了!

259
#14 10-1-9 12:21
提示: 作者被禁止或删除 内容自动屏蔽

1
#15 10-1-20 19:25
cry on my shoulder 那有呀?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

搜索