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

正文內(nèi)容

基于安卓的繪圖軟件開發(fā)與設(shè)計論文(更新版)

2024-12-30 04:47上一頁面

下一頁面
  

【正文】 擎、筆刷選擇的界面、顏色選擇界面、改變筆刷大小和透明度的控件。 本章小結(jié)本章主要實現(xiàn)了利用Android的API對MyPaint筆刷引擎進行移植。JSON是一種數(shù)據(jù)交換格式并采用鍵值對的存儲方式,它易于人們編寫和閱讀,同時機器生成和解析也很方便,這些特性使JSON成為理想的數(shù)據(jù)交換語言[14]。需要注意的是來自res和assets中文件只可以讀取而不可以進行寫操作。將該類的構(gòu)造函數(shù)設(shè)置為私有,不讓外部實例化該對象,創(chuàng)建靜態(tài)方法獲取改對象的引用。 繪制基本筆觸圖像的方法完成后下節(jié)講主要介紹MyPaintBrush對象的設(shè)計,用MyPaintBrush來控制基本筆觸的形態(tài)。(oval2, mPaint)。Bitmap tmpBitmap = (radius*2, radius*2, )。關(guān)鍵代碼如下: Paint mPaint = new Paint()。在本文中將使用RadialGradient來渲染筆觸的漸變效果,使用RadialGradient時主要設(shè)置環(huán)形漸變的顏色數(shù)組和數(shù)組的相對位置即可。onTouchEvent()用于處理手指的繪制事件,以便通知筆刷什么時候繪制筆觸。 結(jié)合Android中提供的onTouchEvent和onDraw我們可以很容易處理相應(yīng)用戶的繪圖事件。1. onTouchEvent在Android里Touch事件是很常用的事件,尤其實在自定義控件中,要實現(xiàn)一些動態(tài)的效果,往往要對Touch進行處理[10]。下面將介紹MyPaint中兩個主要的結(jié)構(gòu)體MyPaintFixedTiledSurface、MyPaintBrush的改寫。運算過程同上。其繪制過程就是將筆觸的tile的A、R、G、B,4個顏色通道和畫布MyPaintFixedTiledSurface中的4個顏色通道的顏色、透明度進行混合,又稱Blend。這主要是用于OpenMP多線程優(yōu)化。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)該方法用于將當前計算好的筆觸參數(shù)和當前筆觸所在畫布中包含的tile的位置保存到一個名為OperationQueue的map中,在以后需要繪制筆觸時將其參數(shù)彈出并進行使用。該方法內(nèi)的參數(shù)和mypaint_brush_stroke_to中的參數(shù)意義一致。b) x,y表示要筆畫要繪制到的位置的坐標。 else opa = hardness/(1hardness)*(1dd)。angle為當前橢圓旋轉(zhuǎn)角度,angle等于β。2. opaque表示筆觸中心點的透明度。:圖 MyPaintBrush結(jié)構(gòu)圖 states數(shù)組保存當前筆觸在畫布中的狀態(tài),states中的內(nèi)容會隨著筆畫的變化而變化。2. hardness:表示筆觸的硬度,即筆刷中心深色區(qū)域的大小。c) _MyPaintSurface _MyPaintSurface是一個抽象數(shù)據(jù)結(jié)構(gòu),他定義了一些筆刷引擎中基本的數(shù)據(jù)處理方法draw_dab和get_color,并在_MyPaintTiledSurface中進行了實現(xiàn)。tiles_width和tiles_height分別表示畫布寬含有小正方形的個數(shù)和高含有的個數(shù)。他支持豐富的模擬自然繪畫的筆刷,性能非常的好,而且它可以很好的支持筆的壓力和角度,能最大程度上模擬出自然繪畫的效果。b) 它沒有UI界面,但是特殊情況可以使用WindowManager創(chuàng)建窗口。該方法需要被非??焖俚膱?zhí)行,因為直到這個方法執(zhí)行完畢以前,下一個Activity都不能被恢復(fù)。當系統(tǒng)資源不足時,被壓入棧的Activity可能會被系統(tǒng)殺掉。 ,它用于配置一個應(yīng)用程序運行時所需要的一些聲明,這些聲明包含程序所需的權(quán)限、Activity信息等,每個android程序都必須含有一個manifest文件。(4) 第四層——應(yīng)用程序?qū)?Applications)。應(yīng)用程序框架是Android平臺專門為應(yīng)用程序開發(fā)而進行設(shè)計的,他提供了豐富的應(yīng)用程序開發(fā)所需要的API,為開發(fā)者進行快速敏捷開發(fā)Android軟件提供了可能。i) SGL:Skia圖形庫,底層的2D圖形引擎。b) Media Framework:以O(shè)penCore為基礎(chǔ)進行開發(fā),主要用于對多媒體功能的支持。3. 在上述工作基礎(chǔ)上編寫Android繪圖軟件界面程序,處理Android事件的響應(yīng)邏輯,實現(xiàn)了Android平臺上的繪圖軟件開發(fā)。但是,Android平臺上大多數(shù)繪畫軟件功能都很弱,沒有豐富效果的筆刷,缺少良好的用戶體驗。正因為Android平臺的硬件和軟件高速發(fā)展,人們在Android等移動設(shè)備上辦公娛樂的需求逐漸增強,一些對于美術(shù)感興趣的人開始漸漸利用身邊的移動設(shè)備上來進行繪畫,用繪畫來記錄身邊發(fā)生的事和物,并及時的和他人進行分享。s brush engine in Java language and transplant it in Android will use this engine in our painting software development.2. Transplant the FFMPEG to Android platform succeed and using it for recording user39。但是,目前Android平臺并沒有很多具有很好繪圖效果的繪畫工具應(yīng)用。2. 將開源視頻編碼庫FFMPEG成功移植到Android平臺,利用此庫進行用戶繪畫過程的錄制,并生成MP4格式的視頻。Google通過官方網(wǎng)上商店平臺Google Play(之前叫做Google Market),提供應(yīng)用程序和游戲等應(yīng)用供用戶下載,截止至2012年6月,Google Play商店擁有超過60萬個官方認證應(yīng)用程序。它能夠通過數(shù)字手段來模擬出傳統(tǒng)筆刷效果。結(jié)合這些繪圖軟件面臨的問題和他們的優(yōu)勢,使得基于Android 移動平臺的易用的模擬自然繪畫的繪圖軟件會有很好前景。 Android系統(tǒng)架構(gòu)Android的系統(tǒng)架構(gòu)采用了分層的架構(gòu),和其他大部分的系統(tǒng)類似,從底向上一共分了4層,每一層都把底層實現(xiàn)封裝,并暴露調(diào)用接口給上一層[3]。OpenGL ES 是從 OpenGL 裁剪定制而來的,他去除了OpenGL中 glBegin/glEnd,四邊形(GL_QUADS)、多邊形(GL_POLYGONS)等復(fù)雜圖元等許多非絕對必要的特性,以使其更加適合移動設(shè)備[4]。a) 核心庫:包含了Android運行時所需要的庫函數(shù)。c) Content Provider:可以使不同類型不同功能的Android應(yīng)用程序之間分享數(shù)據(jù),提高了可擴展性。從上文中得知Android的架構(gòu)是分層的,非常清晰,分工很明確。 Activity棧結(jié)構(gòu)Activity是遵循一種“先進后出”的規(guī)則,他呈現(xiàn)一種棧的結(jié)構(gòu)。c) 停止狀態(tài):當Activity在界面上完全不能被用戶看到,完全被遮擋時,此時就出去停止狀態(tài)。:圖 Activity生命周期:a) onCreat()方法:當Activity被啟動時,會最先回調(diào)該方法,在該回調(diào)函數(shù)中我們常常進行一些程序初始化的工作。f) onStop()方法:當Activity進入停止狀態(tài)時,該函數(shù)被回調(diào)。類似日常生活中的廣播,可以允許多個人同時收聽,也運行不收聽。由于MyPaint的筆刷引擎是由C語言進行開發(fā),為了實現(xiàn)C++中類和繼承的效果,它使用結(jié)構(gòu)體和函數(shù)指針來進行描述。tile_request_start為函數(shù)指針。 get_color的功能為獲取當前筆觸在畫布區(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 )。5. radius_by_random:單個筆觸的半徑隨機偏移量。用于產(chǎn)生筆畫過程中需要用到的隨機數(shù)。從上圖可以看出hardness的大小在0到1之間。 sn = sin(angle/360*2*pi)。不同的筆觸參數(shù)加上其他的不同參數(shù)可以繪制出更加豐富的筆刷,下節(jié)將主要介紹筆刷引擎的工作流程。現(xiàn)在的一些Android設(shè)備也會提供一些帶有壓力感應(yīng)的筆,比如三星的GALAXY NOTE系列的Android手機、平板,它提供了帶有壓感的筆,會將筆的壓力參數(shù)傳輸給Android設(shè)備。b) step_dtime表示當前筆觸和上次接受到系統(tǒng)回調(diào)的時間間隔。下節(jié)將主要介紹draw_dab和get_color是怎么工作的。筆觸會以tile為單位并行的渲染到MyPaintFixedTiledSurface中。對于Normal_and_Eraser模式其函數(shù)原型如下: void draw_dab_pixels_BlendMode_Normal_and_Eraser (uint16_t * mask, uint16_t * rgba, uint16_t color_r, uint16_t color_g, uint16_t color_b, uint16_t color_a, uint16_t opacity)mask指針指向?qū)⒁L制tile的區(qū)域的數(shù)據(jù),mask區(qū)域保存著tile相對于筆觸位置的筆觸的透明度,rgba指向MyPaintFixedTiledSurface中需要繪制mask位置的起始位置,MyPaintFixedTiledSurface包含當前畫布的R、G、B三個顏色分量和A透明度分量。由于MyPaint使用的是uint16_t代表一個像素中的一個通道,它占用2個字節(jié),而Android中一個像素的一個通道為uint8_t,占用一個字節(jié),格式無法兼容。 View介紹Android視圖(View)是一個矩形區(qū)域,它負責(zé)這個區(qū)域里的繪制和事件處理[9]。c) MotionEvent. ACTION_UP表示當前手指剛剛離開View區(qū)域。2. drawCanvas為Canvas類型的成員變量,用于繪制筆觸。在Android中,系統(tǒng)提供了RadialGradient和Paint兩個類Android中提供了Shader類專門用來渲染圖像以及一些幾何圖形,Shader下面包括幾個直接子類,分別是BitmapShader、ComposeShader、LinearGradient、RadialGradient、SweepGradient。所以綜上所述,在小于hardness時,采樣5個點來進行環(huán)形的線性漸變,個數(shù)可更具精度需要來自定義,在大于hardness時,由于幾乎成線性狀態(tài),直接采用一個點來進行處理。 RectF oval2 = new RectF()。(1, aspect_ratio)。5. 回收渲染過程中創(chuàng)建的臨時使用的bitmap。在MyBrush中除了解析Json格式的筆刷數(shù)據(jù)和原始的MyPaintBrush的方法有不同,其他處理過程沒有太大出處。 return mbrush。1. 先在當前的Activity里面調(diào)用getAssets()來獲取Assetmanager引用。對應(yīng)解析這種層層包含關(guān)系的json格式我們需要進行一層層解析。主要的性能損失在于沒有使用多線程,對筆觸中的Bitmap數(shù)據(jù)進行多線程處理,所以當筆刷的半徑很大時,快速繪制具有一定延遲。根據(jù)MVC(ModelViewController)開發(fā)原則,UI部分應(yīng)該與程序邏輯分離。(2) 相對布局 相對布局(RelativeLayout)按照各子元素之間的位置關(guān)系完成布局。屏幕左上角為坐標原點(0,0),第一個0代表橫坐標,向右移動此值增大,第二個0代表縱坐標,向下移動,此值增大。在TableRow中,單元格可以為空,但是不能跨列。將android:orientation屬性設(shè)置成為horizontal,表示該線性布局為水平排列。 該顏色數(shù)組表示顏色從紅色、藍色、綠色、黃色進行線性漸變。在Android中我們可以繼承系統(tǒng)的SeekBar來實現(xiàn)自定義
點擊復(fù)制文檔內(nèi)容
畢業(yè)設(shè)計相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1