android畫圖片
Ⅰ android開發中怎麼繪制圖形
在你制圖之前,你必須初始化和載入你計劃要繪制的形狀。你要在內存和處理速率的渲染器中的onSurfaceCreated()方法對形狀初始化,除非在程序執行的過程中,形狀的結構(原始坐標)發生了變化。
public void onSurfachttp://wiki.eoeandroid.com/Drawing_ShapeseCreated(GL10 unused, EGLConfig config) {
...
// initialize a triangle
mTriangle = new Triangle();
// initialize a square
mSquare = new Square();
}
繪制形狀
使用OpenGL ES 2.0繪制形狀需要大量的代碼,因為你需要提供大量的圖像渲染器管道的細節。具體地,你需要定義: * 頂點著色器(Vertex Shader) - OpenGL ES圖像中渲染形狀頂點的代碼 * 片斷著色器(Fragment Shader) - OpenGL ES渲染形狀表面顏色與紋理的代碼 * 程序(Program) - 包含了你想要用來繪制形狀的著色器的OpenGL ES對象 你需要至少一個頂點著色器來繪制圖像,一個片斷著色器去給圖像著色。這些著色器必須被定義和添加到一個OpenGL ES程序中,它將會在繪制形狀時被用到。下面是一個基本的定義著色器的例子:
private final String vertexShaderCode =
"attribute vec4 vPosition;" +
"void main() {" +
" gl_Position = vPosition;" +
"}";
private final String fragmentShaderCode =
"precision mediump float;" +
"uniform vec4 vColor;" +
"void main() {" +
" gl_FragColor = vColor;" +
"}";
包含了OpenGL著色語言(GLSL)的著色器在被OpenGL ES環境使用之前,必須先被定義。你可以在渲染類中創建一個實用的方法來定義這些著色器:
public static int loadShader(int type, String shaderCode){
// create a vertex shader type (GLES20.GL_VERTEX_SHADER)
// or a fragment shader type (GLES20.GL_FRAGMENT_SHADER)
int shader = GLES20.glCreateShader(type);
// add the source code to the shader and compile it
GLES20.glShaderSource(shader, shaderCode);
GLES20.glCompileShader(shader);
return shader;
}
為了繪制形狀,你必須編寫著色器的代碼,並把它們添加到OpenGL ES程序對象中,與程序連接起來。你可以在繪制對象的構造器做這些事情,這樣它就會只運行一次。
備註:定義OpenGL ES著色器並於程序連接,需要消耗大量的CPU周期和處理時間,所以你要避免重復做這個動作。如果你想要獲取執行期間著色器的內容,你可以在建立代碼使它們只建立一次,並存儲起來在後面用。
public Triangle() {
...
int vertexShader = loadShader(GLES20.GL_VERTEX_SHADER, vertexShaderCode);
int fragmentShader = loadShader(GLES20.GL_FRAGMENT_SHADER, fragmentShaderCode);
mProgram = GLES20.glCreateProgram(); // create empty OpenGL ES Program
GLES20.glAttachShader(mProgram, vertexShader); // add the vertex shader to program
GLES20.glAttachShader(mProgram, fragmentShader); // add the fragment shader to program
GLES20.glLinkProgram(mProgram); // creates OpenGL ES program executables
}
事情進展到此,你可以在實際中調用繪制圖形方法了。使用OpenGL ES制圖時,需要你指定幾個參數,來告訴渲染器管道要畫什麼和怎樣畫。既然形狀會影響到繪制的情況,所以最好的辦法就是給形狀類添加它們各自的邏輯。 可以建立draw()的方法來繪制形狀。下面的例子就設定了形狀的頂點著色器的位置和片段著色器的顏色值,然後就執行繪制的函數方法。
public void draw() {
// Add program to OpenGL ES environment
GLES20.glUseProgram(mProgram);
// get handle to vertex shader's vPosition member
mPositionHandle = GLES20.glGetAttribLocation(mProgram, "vPosition");
// Enable a handle to the triangle vertices
GLES20.glEnableVertexAttribArray(mPositionHandle);
// Prepare the triangle coordinate data
GLES20.glVertexAttribPointer(mPositionHandle, COORDS_PER_VERTEX,
GLES20.GL_FLOAT, false,
vertexStride, vertexBuffer);
// get handle to fragment shader's vColor member
mColorHandle = GLES20.glGetUniformLocation(mProgram, "vColor");
// Set color for drawing the triangle
GLES20.glUniform4fv(mColorHandle, 1, color, 0);
// Draw the triangle
GLES20.glDrawArrays(GLES20.GL_TRIANGLES, 0, vertexCount);
// Disable vertex array
GLES20.glDisableVertexAttribArray(mPositionHandle);
}
只要你代碼齊全,你只需要調用渲染器 onDrawFrame()方法中的draw()方法來繪制圖像。當應用程序運行起來時,應該會得到以下這樣的結果:
Ⅱ android是否可以以畫圖的形式將圖片畫在某位置
可以。
1、在View的onDraw中獲取canvas
java">@Override
protectedvoidonDraw(Canvascanvas){//onDraw中獲取參數中的canvas
//TODOAuto-generatedmethodstub
super.onDraw(canvas);
}
2、獲取圖片,轉化為Bitmap對象
//從資源文件中生成點陣圖bitmap
Bitmapbitmap=BitmapFactory.decodeResource(getResources(),R.drawable.icon);
3、通過canvas的drawbitmap方法,把圖片畫到任意位置。
//Bitmap:圖片對象,left:偏移左邊的位置,top:偏移頂部的位置
//rawBitmap(Bitmapbitmap,floatleft,floattop,Paintpaint)
canvas.drawBitmap(bitmap,10,60,paint);//在10,60處開始繪制圖片
Ⅲ android畫一張圖片,縮放顯示並且放大不失真
這個問題涉及圖片呈現的一整套方案。歸納而言這個問題是:給定任意尺寸的圖片如何在任意尺寸解析度的機器上顯示?並且能夠保持圖片原來的清晰度。一般採用如下方案來解決這個問題:
1、首先給原圖片創建一塊內存緩存副本。如果不創建緩存的話,那麼任何一次圖片的剪切、縮放等操作都將丟失圖片信息,使得保持原有圖片的滋味那是不可能的。當然對於一般的程序而言,這個操作只需要調用簡單的API即可完成。例如Android,只需要創建一個對應圖片的Bitmap對象即可。
2、如果想要在設備顯示的初始化狀態圖片即為滿屏,那麼必須調用相關API動態獲得設備的解析度。然後按設備解析度的大小對圖片進行剪切並顯示到設備上。
注意:在獲得圖片解析度後,如果解析度大於圖片,那不用說,直接顯示圖片就好。但是如果小於圖片,此時有多種選擇。可以將圖片縮放至屏幕解析度(圖片縱橫比可能失真)也可以選擇剪切圖片的一部分顯示到屏幕上。
3、對圖片進行縮放或者移動
我們在圖片第一次顯示的時候無論是選擇縮放還是剪切,都要記錄下圖片被縮放的比例或者剪輯的范圍。這樣在用戶再次移動或者縮放的時候,根據之前的縮放比例和移動坐標,計算當前應該移動的位置和縮放比例。並且根據計算結果對緩存的圖片進行剪輯並顯示到屏幕上。
其實整個過程可以概括為如下流程:
——>圖片的初始縮放比例和顯示起點坐標——>用戶觸發縮放或者移動操作——>計算新的圖片縮放比例和顯示起點坐標——>根據新的縮放比例和顯示起點坐標剪輯緩存圖片並繪制到屏幕上......
Ⅳ android 繪制圖片的一部分
Canvas類用來實現繪制.通過組合使用Canvas類的成員函數可以實現隨心隨欲地繪制圖片的任何部分.
Canvas.clipRect:設置顯示區域
Canvas.drawBitmap:繪制
例子:
Bitmap
b=BitmapFactory.decodeStream("圖片編號",
null);//讀取圖片
...
Canvas
c
=
null;//實例Canvas
c.save();//記錄原來的canvas狀態
c.clipRect(100,100,200,300);//顯示從(100,100)到(200,300)的區域(單位:象素)
c.drawBitmap(b,10,0,null);
//將閹割過的圖片畫到(10,0)位置
c.restore();//恢復canvas狀態
Ⅳ android 繪制圖片的一部分
Canvas類用來實現繪制.通過組合使用Canvas類的成員函數可以實現隨心隨欲地繪制圖片的任何部分.
Canvas.clipRect:設置顯示區域
Canvas.drawBitmap:繪制
例子:
Bitmap b=BitmapFactory.decodeStream("圖片編號", null);//讀取圖片
...
Canvas c = null;//實例Canvas
c.save();//記錄原來的canvas狀態
c.clipRect(100,100,200,300);//顯示從(100,100)到(200,300)的區域(單位:象素)
c.drawBitmap(b,10,0,null); //將閹割過的圖片畫到(10,0)位置
c.restore();//恢復canvas狀態
Ⅵ android 畫圖片的幾種方法
方法:
1.使用Xfermode 兩圖相交方式
2.通過裁剪畫布區域實現指定形狀的圖形
3.使用BitmapShader
Ⅶ 安卓系統手機上有什麼好用的畫圖軟體
樓主可以試一下應用寶裡面的繪圖神器完整版
這個軟體裡面有一些專業的工具,比如鉛筆、噴咀、油劃筆、原子筆、填充效果
而且應用寶裡面軟體兼容性很好
可以根據手機型號來下載,不會出現閃退等情況的
而且這個占內存也不大,差不多12M左右
希望樓主會喜歡
Ⅷ 如何在android畫分析圖(例如 柱狀圖、趨勢圖、餅圖)
目前android上圖標引擎並不少見,像aChartEngine就能很好的完成繪圖:
aChartEngine支持:1、linechart(折線圖)2、areachart(面積圖;分區圖,對比圖)3、scatterchart(散點圖)4、timechart(時間圖;進度表)5、barchart(條形圖;柱狀圖)6、piechart(餅圖)7、bubblechart(氣泡圖)8、doughnutchart(圓環圖)9、range(high-low)barchart(范圍條形圖)10、dialchart/gauge(撥號盤/壓力表)11、combined(anycombinationofline,cubicline,scatter,bar,rangebar,bubble)chart(組合圖)12、cubiclinechart(立方折線圖)
上述所有支持的圖表類型,都可以包含多個系列,都支持水平(默認)或垂直方式展示圖表,並且支持許多其他的自定義功能。所有圖表都可以建立為一個view,也可以建立為一個用於啟動activity的intent.
下面是一個餅狀圖的源碼事例:
package org.achartengine.chartdemo.demo.chart;
import org.achartengine.ChartFactory;
import org.achartengine.renderer.DefaultRenderer;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
public class BudgetPieChart extends AbstractDemoChart {
public String getName() {
return "Budget chart";
}
public String getDesc() {
return "The budget per project for this year (pie chart)";
}
public Intent execute(Context context) {
double[] values = new double[] { 12, 14, 11, 10, 19 };//餅圖分層5塊,每塊代表的數值
int[] colors = new int[] { Color.BLUE, Color.GREEN, Color.MAGENTA, Color.YELLOW, Color.CYAN };//每塊餅圖的顏色
DefaultRenderer renderer = buildCategoryRenderer(colors);
renderer.setZoomButtonsVisible(true);//設置顯示放大縮小按鈕
renderer.setZoomEnabled(true);//設置允許放大縮小.
renderer.setChartTitleTextSize(20);//設置圖表標題的文字大小
return ChartFactory.getPieChartIntent(context, buildCategoryDataset("Project budget", values),
renderer, "Budget");//構建Intent, buildCategoryDataset是調用AbstraDemoChart的構建方法.
}
}
Ⅸ 在圖片上畫重點的手機軟體,安卓
印象筆記圈點就可以
簡單易用,可以給圖片做個簡單的標記什麼的
這款軟體是我之前在應用寶里發現的,我也用過,還可以
你要是需要的話可以去它裡面下載一個
應用寶里實用性的軟體挺多的,像平時想找啥軟體一般搜索關鍵詞就可以找到相關的
下面是給你找的截圖,看看是不是你想要的吧
Ⅹ Android繪制圖片的幾種方式
在android中做圖像鏡像有很多方法,今天算是學習了!
兩種方法如下:
復制代碼 代碼如下:
//方法一
Matrix matrix = new Matrix();
matrix.postScale(leftOrRight, 1, bmpW/2, bmpH/2);//前兩個是xy變換,後兩個是對稱軸中心點
matrix.postTranslate(x, y);
canvas.drawBitmap(bmpLuffy[0], matrix, paint);
//方法二
// canvas.save();
// canvas.scale(-1, 1, x + bmpLuffy[0].getWidth() / 2, y + bmpLuffy[0].getHeight() / 2);
// canvas.drawBitmap(bmpLuffy[0], x, y, paint);
// canvas.restore();
方法一,使用矩陣的方式(3x3)矩陣:
1、先使用postScale的方式將圖片以點(bmpW/2,bmpH/2)為中心,以x=bmpW/2為對稱軸翻轉;
2、使用postTranslate,將圖片移到(x,y)坐標
方法二,畫布翻轉(略)
注意如下問題:
對於其中的bmpW和bmpH是指所用圖片的寬高,需要使用圖片bmp.getWidth()和bmp.getHeight()獲取,
不能使用PC上看到的大小,否則可能會出現錯位!