freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于安卓的繪圖軟件開發(fā)與設(shè)計(jì)論文(編輯修改稿)

2024-12-14 04:47 本頁面
 

【文章內(nèi)容簡(jiǎn)介】 pha_eraser, float aspect_ratio, float angle, float lock_alpha, float colorize )。 get_color的功能為獲取當(dāng)前筆觸在畫布區(qū)域中顏色的均值,它也被定義為函數(shù)指針,函數(shù)原型如下:void mypaint_surface_get_color(MyPaintSurface *self, float x, float y, float radius, float * color_r, float * color_g, float * color_b, float * color_a )。 destroy作用為釋放所用到的數(shù)據(jù)結(jié)構(gòu)的內(nèi)存。 MyPaintBrush 結(jié)構(gòu)介紹 在MyPaint中筆刷所需的參數(shù)被定義在一個(gè)后綴名為“myb”的json格式文件內(nèi)。在MyPaint中一共包含了42個(gè)筆刷參數(shù),這里主要介紹其中常用的部分參數(shù)意義,下文提到的筆觸概念將在下節(jié)中詳細(xì)介紹。 部分參數(shù)意義如下:1. opaque:筆刷的透明度,也表示ARGB顏色通道中的alpha通道。2. hardness:表示筆觸的硬度,即筆刷中心深色區(qū)域的大小。3. dabs_per_basic_radius、dabs_per_actual_radius、dabs_per_second:這三個(gè)參數(shù)決定一個(gè)筆畫中單個(gè)筆觸的密度。4. offset_by_random:?jiǎn)蝹€(gè)筆觸的位置隨機(jī)偏移量。5. radius_by_random:?jiǎn)蝹€(gè)筆觸的半徑隨機(jī)偏移量。6. color_h、color_s、color_v:?jiǎn)蝹€(gè)筆觸顏色的H、S、V分量。7. smudge:表示該筆刷具有涂抹功能,可以將筆刷顏色與畫布中顏色進(jìn)行混合。8. elliptical_dab_ratio:表示單個(gè)筆觸的寬和長(zhǎng)的比例。9. elliptical_dab_angle:表示單個(gè)筆觸的旋轉(zhuǎn)角度。:圖 MyPaintBrush結(jié)構(gòu)圖 states數(shù)組保存當(dāng)前筆觸在畫布中的狀態(tài),states中的內(nèi)容會(huì)隨著筆畫的變化而變化。states保存的狀態(tài)包括:筆的壓力、筆觸的半徑、筆觸的位置、筆觸的顏色、筆觸的旋轉(zhuǎn)角度和筆觸的寬高比等。 RngDouble是一個(gè)隨機(jī)數(shù)生成器。用于產(chǎn)生筆畫過程中需要用到的隨機(jī)數(shù)。 Settings數(shù)組保存從筆刷的json文件中解析出來的參數(shù),基本參數(shù)保存在base_value中,其他的一些input參數(shù)保存在ControlPoints中,這些input參數(shù)會(huì)和當(dāng)前筆觸的參數(shù)進(jìn)行線性運(yùn)算,運(yùn)算結(jié)果保存到數(shù)組settings_value中。 MyPaint筆刷引擎工作原理 MyPaint的基本繪制單位——筆觸在MyPaint中一個(gè)基本繪制單位被稱做“dab”,轉(zhuǎn)換成中文可以被稱作筆觸。在繪畫過程中,一個(gè)筆畫是由許多連續(xù)的筆觸構(gòu)成。:圖 筆觸圖將一個(gè)筆畫和筆觸間距放大可以看出,一個(gè)筆畫是由于許多連續(xù)的筆觸構(gòu)成,:圖 筆畫放大圖筆觸被radius、opaque、hardness、aspect_ration和angle這5個(gè)參數(shù)所定義:1. radius表示筆觸的半徑。2. opaque表示筆觸中心點(diǎn)的透明度。3. hardness表示筆觸的透明度淡出程度和離筆觸中心點(diǎn)距離的關(guān)系。:圖 hardness與opaque關(guān)系圖 ,d表示離筆觸中心點(diǎn)的距離,筆觸的透明度隨著離中心點(diǎn)的距離平方的變化呈兩段線性減小的改變。從上圖可以看出hardness的大小在0到1之間。:圖 筆觸透明度在不同hardness和d的分布 hardness小的筆觸可以用來繪制一些有噴槍效果比刷,具有邊界模糊的效果。:圖 噴槍效果筆刷4. 在MyPaint中筆觸不全是正圓形,它也可以被表示為橢圓形。參數(shù)aspect_ration和angle被用來定義一個(gè)橢圓形的筆觸。:圖 橢圓形筆觸 aspect_ratio為橢圓長(zhǎng)軸和短軸的比,aspect_ratio等于a/r。angle為當(dāng)前橢圓旋轉(zhuǎn)角度,angle等于β。計(jì)算橢圓形筆觸的透明度比正圓形的要復(fù)雜點(diǎn),不過原理是一樣的。計(jì)算橢圓形筆觸透明度的偽代碼如下: cs = cos(angle/360*2*pi)。 sn = sin(angle/360*2*pi)。 for each pixel: dx = x dy = y dyr = (dy*csdx*sn)*aspect_ratio。 dxr = (dy*sn+dx*cs)。 dd = (dyr*dyr + dxr*dxr) / (radius*radius)。 if dd 1: opa = 0 else if dd hardness: opa = dd + 1(dd/hardness)。 else opa = hardness/(1hardness)*(1dd)。 pixel_opacity = opa * opaque。:圖 橢圓形筆觸的繪畫效果 本節(jié)主要介紹了MyPaint的基本渲染單元——筆觸,以及它是如何被定義的。不同的筆觸參數(shù)加上其他的不同參數(shù)可以繪制出更加豐富的筆刷,下節(jié)將主要介紹筆刷引擎的工作流程。 筆刷引擎的工作流程 MyPaint筆刷引擎主要工作函數(shù)MyPaint筆刷引擎的主要作用是根據(jù)用戶的輸入的外部參數(shù)實(shí)時(shí)渲染筆觸。這些接受外部參數(shù)和實(shí)時(shí)更新參數(shù)的方法被定義到以下幾個(gè)主要的函數(shù)中。1. int mypaint_brush_stroke_to(MyPaintBrush *self, MyPaintSurface *surface, float x, float y, float pressure, float xtilt, float ytilt, double dtime);當(dāng)用戶在畫布上每次移動(dòng)時(shí),外部設(shè)備會(huì)有回調(diào)函數(shù)出發(fā),在每次系統(tǒng)回調(diào)這些函數(shù)時(shí)調(diào)用mypaint_brush_stroke_to這個(gè)方法,此方法的意義是將筆刷從上一次繪制的點(diǎn)繪制到當(dāng)前位置,形成一個(gè)筆畫。其中的參數(shù)意義如下:a) MyPaintBrush和MyPaintSurface的含有以在上文中解釋過,一個(gè)含有當(dāng)前筆刷的數(shù)據(jù)和方法,一個(gè)含有當(dāng)前畫布的數(shù)據(jù)和方法。b) x,y表示要筆畫要繪制到的位置的坐標(biāo)。c) pressure表示用戶繪制到畫布時(shí)的筆刷的壓力。在一些PC桌面設(shè)備中,會(huì)有一些手繪板設(shè)備,當(dāng)用戶在繪畫過程中,會(huì)向系統(tǒng)提供當(dāng)前用戶繪畫時(shí)筆的壓力感應(yīng)參數(shù)?,F(xiàn)在的一些Android設(shè)備也會(huì)提供一些帶有壓力感應(yīng)的筆,比如三星的GALAXY NOTE系列的Android手機(jī)、平板,它提供了帶有壓感的筆,會(huì)將筆的壓力參數(shù)傳輸給Android設(shè)備。d) xtilt,ytilt表示當(dāng)前筆刷的傾斜角度和旋轉(zhuǎn)角度,在一些PC高級(jí)手繪板中會(huì)有這兩個(gè)參數(shù)提供。對(duì)于Android設(shè)備,目前沒有發(fā)現(xiàn)具有這兩個(gè)參數(shù)的筆提供,本文暫不做過多討論。e) ditme為兩次接受到系統(tǒng)回調(diào)的時(shí)間間隔。2. float count_dabs_to (MyPaintBrush *self, float x, float y, float pressure, float dtime)該方法會(huì)根據(jù)一個(gè)筆畫中當(dāng)前筆觸的位置和需要繪制到的繪制計(jì)算出該過程需要繪制筆觸的個(gè)數(shù)。該方法內(nèi)的參數(shù)和mypaint_brush_stroke_to中的參數(shù)意義一致。3. void update_states_and_setting_values (MyPaintBrush *self, float step_dx, float step_dy, float step_dpressure, float step_declination, float step_ascension, float step_dtime)該方法主要用于根據(jù)外部用戶輸入?yún)?shù)更新筆刷內(nèi)部的一些參數(shù),使其應(yīng)用到每個(gè)筆觸中去。a) step_dx、step_dy、step_dpressure表示需要當(dāng)前筆觸的x、y坐標(biāo)和筆壓。b) step_dtime表示當(dāng)前筆觸和上次接受到系統(tǒng)回調(diào)的時(shí)間間隔。c) step_declination、step_ascension表示的意義和上文介紹的函數(shù)mypaint_brush_stroke_to中的xtilt,ytilt意義是相同的。本文暫不過多討論。在MyPaint中,出于性能考慮,筆觸的坐標(biāo)、壓感、時(shí)間都是根據(jù)相鄰兩次系統(tǒng)回調(diào)時(shí)給出的參數(shù)進(jìn)行線性插值來進(jìn)行計(jì)算的。:圖 筆觸進(jìn)行線性插值4. prepare_and_draw_dab (MyPaintBrush *self, MyPaintSurface * surface)該方法用于根據(jù)筆刷當(dāng)前的參數(shù)運(yùn)算出需要渲染單個(gè)筆觸的參數(shù),比如筆觸的位置、大小、顏色等。5. int draw_dab (MyPaintSurface *surface, float x, float y, float radius, float color_r, float color_g, float color_b, float opaque, float hardness, float color_a, float aspect_ratio, float angle, float lock_alpha, float colorize)該方法用于將當(dāng)前計(jì)算好的筆觸參數(shù)和當(dāng)前筆觸所在畫布中包含的tile的位置保存到一個(gè)名為OperationQueue的map中,在以后需要繪制筆觸時(shí)將其參數(shù)彈出并進(jìn)行使用。6. void get_color (MyPaintSurface *surface, float x, float y, float radius, float * color_r, float * color_g, float * color_b, float * color_a)該方法有兩個(gè)作用,一個(gè)是將draw_dab方法中保存筆觸參數(shù)的OperationQueue中的參數(shù)依次彈出,并將該筆觸繪制到畫布中。另一個(gè)作用是獲取畫布中當(dāng)前筆觸所在區(qū)域中畫布顏色的平均值,并根據(jù)需要將其應(yīng)用到下個(gè)筆觸的繪制中。下節(jié)將主要介紹draw_dab和get_color是怎么工作的。 draw_dab和get_color方法的工作原理 為了提高渲染筆觸的效率,MyPaint使用了Open MultiProcessing(OpenMP)多線程編程技術(shù)。 OpenMP全稱為OpenMP Architecture Review Board是一種單機(jī)多線程技術(shù)[8]。程序中通過一些pragma配置即可由編譯器將程序并行化,當(dāng)選擇忽略這些參數(shù),或者編譯器不支持OpenMP的時(shí)候,代碼可以正常運(yùn)行,只是不能進(jìn)行多線程運(yùn)行。 在上文中已經(jīng)提過,MyPaint將 MyPaintFixedTiledSurface分成許多個(gè)大小為64的名為tile的小正方形。這主要是用于OpenMP多線程優(yōu)化。:圖 基于tile筆觸分割 根據(jù)上圖在draw_dab時(shí),MyPaint將單個(gè)筆觸按照tile的大小進(jìn)行分割,并將單個(gè)筆觸所包含的tile的位置作為鍵值和筆觸的渲染所需參數(shù)作為值壓入名為OperationQueue的map中,在需要渲染該筆觸的時(shí)候?qū)⑵鋸膍ap中彈出進(jìn)行其他操作。 在get_color時(shí)會(huì)根據(jù)筆觸所包含tile的位置,將渲染筆觸的參數(shù)從OperationQueue中彈出。筆觸會(huì)以tile為單位并行的渲染到MyPaintFixedTiledSurface中。 渲染筆觸所包含的單個(gè)tile過程在上文中獲取到單個(gè)需要渲染的tile的在筆觸中的位置和筆觸的參數(shù)后,接下來就是如何將其渲染到我們的畫布MyPaintFixedTiledSurface中去。渲染流程如下:1. 計(jì)算當(dāng)前像素離筆觸中心的距離d,根據(jù)上文筆觸的形態(tài)定義,計(jì)算出所需的,r表示筆觸的半徑。2. 根據(jù)所計(jì)算出來計(jì)算出當(dāng)前像素的透明度。3. 根據(jù)筆觸的透明度和顏色,將該tile繪制到MyPaintFixedTiledSurface中。其繪制過程就是將筆觸的tile的A、R、G、B,4個(gè)顏色通道和畫布MyPaintFixedTiledSurface中的4個(gè)顏色通道的顏色、透明度進(jìn)行混合,又稱Blend。在MyPaint中主要含有兩種Blend模式,一種名為Normal,用于普通筆刷;另一種名為Normal_and_Eraser模式,用于有涂抹功能的筆刷,涂抹功能的筆刷可以將畫布區(qū)域的顏色和筆刷的顏色進(jìn)行混合,可以模擬出手在畫布涂抹的效果
點(diǎn)擊復(fù)制文檔內(nèi)容
畢業(yè)設(shè)計(jì)相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1