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上看到的大小,否则可能会出现错位!