使用aChartEngineer分析图片的RGB像素分布,但是没有图像显示,情况如图:源代码如下:
主程序
/*RGB曲线图*/
mButton05.setOnClickListener(new Button.OnClickListener()
{
@Override
public void onClick(View arg0)
{
// TODO Auto-generated method stub
/*获取*/
String fileName = "/sdcard/02safety.jpg";
File f =new File(fileName);
Bitmap rectBitmap2 = null;
if(f.exists())
{
/* 产生Bitmap对象,并放入mImageView中 */
rectBitmap2 = BitmapFactory.decodeFile(fileName);
}
else
{
mMakeTextToast("文件不存在", true);
}
/*获取层析试纸RGB值*/
int[] pixel = new int[220];
int[] pred = new int[220];
int[] pgreen = new int[220];
int[] pblue = new int[220];
for (int j = 0; j < 220; j++)
{
pixel[j] = rectBitmap2.getPixel(75, j);
pred[j] = Color.red(pixel[j]);
pgreen[j] = Color.green(pixel[j]);
pblue[j] = Color.blue(pixel[j]);
}
/*不同的Activity之间传递数据*/
Intent intent = new Intent();
intent.setClass(EX07_15.this, Colorchart.class);
//intent.setClass(EX07_15.this,AverageCubic.class);
/*new一个Bundle对象,并将要传递的数据传入*/
Bundle bundle = new Bundle();
bundle.putIntArray("red", pred);
bundle.putIntArray("green", pgreen);
bundle.putIntArray("blue", pblue);
/*将Bundle对象Assign给Intent*/
intent.putExtras(bundle);
//Intent intent = null;
//intent = new Intent(EX07_15.this,AverageCubicTemperatureChart.class);
startActivity(intent);
}
});
Colorchart:
package irdc.ex07_15;import java.security.PublicKey;
import java.util.ArrayList;
import java.util.List;
import org.achartengine.ChartFactory;
import org.achartengine.chart.PointStyle;
import org.achartengine.renderer.XYMultipleSeriesRenderer;
import org.achartengine.renderer.XYSeriesRenderer;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.graphics.Paint.Align;
import android.os.Bundle;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import android.app.Activity;
import android.widget.TextView;public class Colorchart extends AbstractDemoChart {
public String getName() {
return "RGB像素值";
}
public String getDesc() {
return "The average temperature in 4 Greek islands (line chart)";
}
public Intent execute(Context context) {
String[] titles = new String[] { "Red", "Blue", "Yellow"};//图例
List<int[]> x = new ArrayList<int[]>();
for (int i = 0; i < titles.length; i++) {
int[] xpixel = new int[220];
for (int j = 0; j < 220; j++)
{
xpixel[j] = j+1;
}
x.add(xpixel);//每个序列中点的X坐标
}
List<int[]> values = new ArrayList<int[]>();
/*取得Bundle对象中的数据*/
Bundle bundle = this.getIntent().getExtras();
int[] pred = bundle.getIntArray("red");
int[] pgreen = bundle.getIntArray("green");
int[] pblue = bundle.getIntArray("blue");
values.add(pred);//序列1中7点的y坐标
values.add(pgreen);//序列2中点的Y坐标
values.add(pblue);//序列3中点的Y坐标
int[] colors = new int[] { Color.RED, Color.GREEN, Color.BLUE };//每个序列的颜色设置
PointStyle[] styles = new PointStyle[] { PointStyle.CIRCLE, PointStyle.DIAMOND,
PointStyle.TRIANGLE};//每个序列中点的形状设置
XYMultipleSeriesRenderer renderer = buildRenderer(colors, styles);//调用AbstractDemoChart中的方法设置renderer.
int length = renderer.getSeriesRendererCount();
for (int i = 0; i < length; i++) {
((XYSeriesRenderer) renderer.getSeriesRendererAt(i)).setFillPoints(true);//设置图上的点为实心
}
setChartSettings(renderer, "RGB像素值", "x轴", "像素值", 0.5, 220, 0.5, 257,
Color.LTGRAY, Color.LTGRAY);//调用AbstractDemoChart中的方法设置图表的renderer属性.
renderer.setXLabels(20);//设置x轴显示12个点,根据setChartSettings的最大值和最小值自动计算点的间隔
renderer.setYLabels(20);//设置y轴显示10个点,根据setChartSettings的最大值和最小值自动计算点的间隔
renderer.setShowGrid(true);//是否显示网格
renderer.setXLabelsAlign(Align.RIGHT);//刻度线与刻度标注之间的相对位置关系
renderer.setYLabelsAlign(Align.CENTER);//刻度线与刻度标注之间的相对位置关系
renderer.setZoomButtonsVisible(true);//是否显示放大缩小按钮
renderer.setPanLimits(new double[] { 0, 200, 0, 200 }); //设置拖动时X轴Y轴允许的最大值最小值.
renderer.setZoomLimits(new double[] { 1, 300, 1, 300 });//设置放大缩小时X轴Y轴允许的最大最小值.
Intent intent = ChartFactory.getLineChartIntent(context, buildDataset(titles, x, values),
renderer, "Average temperature111");//构建Intent
return intent;
}
}
AbstractDemoChart:
package irdc.ex07_15;import java.util.Date;
import java.util.List;import org.achartengine.chart.PointStyle;
import org.achartengine.model.CategorySeries;
import org.achartengine.model.MultipleCategorySeries;
import org.achartengine.model.TimeSeries;
import org.achartengine.model.XYMultipleSeriesDataset;
import org.achartengine.model.XYSeries;
import org.achartengine.renderer.DefaultRenderer;
import org.achartengine.renderer.SimpleSeriesRenderer;
import org.achartengine.renderer.XYMultipleSeriesRenderer;
import org.achartengine.renderer.XYSeriesRenderer;import android.app.Activity;/**
* An abstract class for the demo charts to extend. It contains some methods for
* building datasets and renderers.
*/
public abstract class AbstractDemoChart extends Activity implements IDemoChart { /**
* Builds an XY multiple dataset using the provided values.
*
* @param titles the series titles
* @param xValues the values for the X axis
* @param yValues the values for the Y axis
* @return the XY multiple dataset
*/
protected XYMultipleSeriesDataset buildDataset(String[] titles, List<int[]> xValues,
List<int[]> yValues) {
XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();
addXYSeries(dataset, titles, xValues, yValues, 0);
return dataset;
} public void addXYSeries(XYMultipleSeriesDataset dataset, String[] titles, List<int[]> xValues,
List<int[]> yValues, int scale) {
int length = titles.length;
for (int i = 0; i < length; i++) {
XYSeries series = new XYSeries(titles[i], scale);
int[] xV = xValues.get(i);
int[] yV = yValues.get(i);
int seriesLength = xV.length;
for (int k = 0; k < seriesLength; k++) {
series.add(xV[k], yV[k]);
}
dataset.addSeries(series);
}
} /**
* Builds an XY multiple series renderer.
*
* @param colors the series rendering colors
* @param styles the series point styles
* @return the XY multiple series renderers
*/
protected XYMultipleSeriesRenderer buildRenderer(int[] colors, PointStyle[] styles) {
XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer();
setRenderer(renderer, colors, styles);
return renderer;
} protected void setRenderer(XYMultipleSeriesRenderer renderer, int[] colors, PointStyle[] styles) {
renderer.setAxisTitleTextSize(16);
renderer.setChartTitleTextSize(20);
renderer.setLabelsTextSize(15);
renderer.setLegendTextSize(15);
renderer.setPointSize(5f);
renderer.setMargins(new int[] { 20, 30, 15, 20 });
int length = colors.length;
for (int i = 0; i < length; i++) {
XYSeriesRenderer r = new XYSeriesRenderer();
r.setColor(colors[i]);
r.setPointStyle(styles[i]);
renderer.addSeriesRenderer(r);
}
} /**
* Sets a few of the series renderer settings.
*
* @param renderer the renderer to set the properties to
* @param title the chart title
* @param xTitle the title for the X axis
* @param yTitle the title for the Y axis
* @param xMin the minimum value on the X axis
* @param xMax the maximum value on the X axis
* @param yMin the minimum value on the Y axis
* @param yMax the maximum value on the Y axis
* @param axesColor the axes color
* @param labelsColor the labels color
*/
protected void setChartSettings(XYMultipleSeriesRenderer renderer, String title, String xTitle,
String yTitle, double xMin, double xMax, double yMin, double yMax, int axesColor,
int labelsColor) {
renderer.setChartTitle(title);
renderer.setXTitle(xTitle);
renderer.setYTitle(yTitle);
renderer.setXAxisMin(xMin);
renderer.setXAxisMax(xMax);
renderer.setYAxisMin(yMin);
renderer.setYAxisMax(yMax);
renderer.setAxesColor(axesColor);
renderer.setLabelsColor(labelsColor);
} /**
* Builds an XY multiple time dataset using the provided values.
*
* @param titles the series titles
* @param xValues the values for the X axis
* @param yValues the values for the Y axis
* @return the XY multiple time dataset
*/
protected XYMultipleSeriesDataset buildDateDataset(String[] titles, List<Date[]> xValues,
List<double[]> yValues) {
XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();
int length = titles.length;
for (int i = 0; i < length; i++) {
TimeSeries series = new TimeSeries(titles[i]);
Date[] xV = xValues.get(i);
double[] yV = yValues.get(i);
int seriesLength = xV.length;
for (int k = 0; k < seriesLength; k++) {
series.add(xV[k], yV[k]);
}
dataset.addSeries(series);
}
return dataset;
} /**
* Builds a category series using the provided values.
*
* @param titles the series titles
* @param values the values
* @return the category series
*/
protected CategorySeries buildCategoryDataset(String title, double[] values) {
CategorySeries series = new CategorySeries(title);
int k = 0;
for (double value : values) {
series.add("Project " + ++k, value);
} return series;
}
主程序
/*RGB曲线图*/
mButton05.setOnClickListener(new Button.OnClickListener()
{
@Override
public void onClick(View arg0)
{
// TODO Auto-generated method stub
/*获取*/
String fileName = "/sdcard/02safety.jpg";
File f =new File(fileName);
Bitmap rectBitmap2 = null;
if(f.exists())
{
/* 产生Bitmap对象,并放入mImageView中 */
rectBitmap2 = BitmapFactory.decodeFile(fileName);
}
else
{
mMakeTextToast("文件不存在", true);
}
/*获取层析试纸RGB值*/
int[] pixel = new int[220];
int[] pred = new int[220];
int[] pgreen = new int[220];
int[] pblue = new int[220];
for (int j = 0; j < 220; j++)
{
pixel[j] = rectBitmap2.getPixel(75, j);
pred[j] = Color.red(pixel[j]);
pgreen[j] = Color.green(pixel[j]);
pblue[j] = Color.blue(pixel[j]);
}
/*不同的Activity之间传递数据*/
Intent intent = new Intent();
intent.setClass(EX07_15.this, Colorchart.class);
//intent.setClass(EX07_15.this,AverageCubic.class);
/*new一个Bundle对象,并将要传递的数据传入*/
Bundle bundle = new Bundle();
bundle.putIntArray("red", pred);
bundle.putIntArray("green", pgreen);
bundle.putIntArray("blue", pblue);
/*将Bundle对象Assign给Intent*/
intent.putExtras(bundle);
//Intent intent = null;
//intent = new Intent(EX07_15.this,AverageCubicTemperatureChart.class);
startActivity(intent);
}
});
Colorchart:
package irdc.ex07_15;import java.security.PublicKey;
import java.util.ArrayList;
import java.util.List;
import org.achartengine.ChartFactory;
import org.achartengine.chart.PointStyle;
import org.achartengine.renderer.XYMultipleSeriesRenderer;
import org.achartengine.renderer.XYSeriesRenderer;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.graphics.Paint.Align;
import android.os.Bundle;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import android.app.Activity;
import android.widget.TextView;public class Colorchart extends AbstractDemoChart {
public String getName() {
return "RGB像素值";
}
public String getDesc() {
return "The average temperature in 4 Greek islands (line chart)";
}
public Intent execute(Context context) {
String[] titles = new String[] { "Red", "Blue", "Yellow"};//图例
List<int[]> x = new ArrayList<int[]>();
for (int i = 0; i < titles.length; i++) {
int[] xpixel = new int[220];
for (int j = 0; j < 220; j++)
{
xpixel[j] = j+1;
}
x.add(xpixel);//每个序列中点的X坐标
}
List<int[]> values = new ArrayList<int[]>();
/*取得Bundle对象中的数据*/
Bundle bundle = this.getIntent().getExtras();
int[] pred = bundle.getIntArray("red");
int[] pgreen = bundle.getIntArray("green");
int[] pblue = bundle.getIntArray("blue");
values.add(pred);//序列1中7点的y坐标
values.add(pgreen);//序列2中点的Y坐标
values.add(pblue);//序列3中点的Y坐标
int[] colors = new int[] { Color.RED, Color.GREEN, Color.BLUE };//每个序列的颜色设置
PointStyle[] styles = new PointStyle[] { PointStyle.CIRCLE, PointStyle.DIAMOND,
PointStyle.TRIANGLE};//每个序列中点的形状设置
XYMultipleSeriesRenderer renderer = buildRenderer(colors, styles);//调用AbstractDemoChart中的方法设置renderer.
int length = renderer.getSeriesRendererCount();
for (int i = 0; i < length; i++) {
((XYSeriesRenderer) renderer.getSeriesRendererAt(i)).setFillPoints(true);//设置图上的点为实心
}
setChartSettings(renderer, "RGB像素值", "x轴", "像素值", 0.5, 220, 0.5, 257,
Color.LTGRAY, Color.LTGRAY);//调用AbstractDemoChart中的方法设置图表的renderer属性.
renderer.setXLabels(20);//设置x轴显示12个点,根据setChartSettings的最大值和最小值自动计算点的间隔
renderer.setYLabels(20);//设置y轴显示10个点,根据setChartSettings的最大值和最小值自动计算点的间隔
renderer.setShowGrid(true);//是否显示网格
renderer.setXLabelsAlign(Align.RIGHT);//刻度线与刻度标注之间的相对位置关系
renderer.setYLabelsAlign(Align.CENTER);//刻度线与刻度标注之间的相对位置关系
renderer.setZoomButtonsVisible(true);//是否显示放大缩小按钮
renderer.setPanLimits(new double[] { 0, 200, 0, 200 }); //设置拖动时X轴Y轴允许的最大值最小值.
renderer.setZoomLimits(new double[] { 1, 300, 1, 300 });//设置放大缩小时X轴Y轴允许的最大最小值.
Intent intent = ChartFactory.getLineChartIntent(context, buildDataset(titles, x, values),
renderer, "Average temperature111");//构建Intent
return intent;
}
}
AbstractDemoChart:
package irdc.ex07_15;import java.util.Date;
import java.util.List;import org.achartengine.chart.PointStyle;
import org.achartengine.model.CategorySeries;
import org.achartengine.model.MultipleCategorySeries;
import org.achartengine.model.TimeSeries;
import org.achartengine.model.XYMultipleSeriesDataset;
import org.achartengine.model.XYSeries;
import org.achartengine.renderer.DefaultRenderer;
import org.achartengine.renderer.SimpleSeriesRenderer;
import org.achartengine.renderer.XYMultipleSeriesRenderer;
import org.achartengine.renderer.XYSeriesRenderer;import android.app.Activity;/**
* An abstract class for the demo charts to extend. It contains some methods for
* building datasets and renderers.
*/
public abstract class AbstractDemoChart extends Activity implements IDemoChart { /**
* Builds an XY multiple dataset using the provided values.
*
* @param titles the series titles
* @param xValues the values for the X axis
* @param yValues the values for the Y axis
* @return the XY multiple dataset
*/
protected XYMultipleSeriesDataset buildDataset(String[] titles, List<int[]> xValues,
List<int[]> yValues) {
XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();
addXYSeries(dataset, titles, xValues, yValues, 0);
return dataset;
} public void addXYSeries(XYMultipleSeriesDataset dataset, String[] titles, List<int[]> xValues,
List<int[]> yValues, int scale) {
int length = titles.length;
for (int i = 0; i < length; i++) {
XYSeries series = new XYSeries(titles[i], scale);
int[] xV = xValues.get(i);
int[] yV = yValues.get(i);
int seriesLength = xV.length;
for (int k = 0; k < seriesLength; k++) {
series.add(xV[k], yV[k]);
}
dataset.addSeries(series);
}
} /**
* Builds an XY multiple series renderer.
*
* @param colors the series rendering colors
* @param styles the series point styles
* @return the XY multiple series renderers
*/
protected XYMultipleSeriesRenderer buildRenderer(int[] colors, PointStyle[] styles) {
XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer();
setRenderer(renderer, colors, styles);
return renderer;
} protected void setRenderer(XYMultipleSeriesRenderer renderer, int[] colors, PointStyle[] styles) {
renderer.setAxisTitleTextSize(16);
renderer.setChartTitleTextSize(20);
renderer.setLabelsTextSize(15);
renderer.setLegendTextSize(15);
renderer.setPointSize(5f);
renderer.setMargins(new int[] { 20, 30, 15, 20 });
int length = colors.length;
for (int i = 0; i < length; i++) {
XYSeriesRenderer r = new XYSeriesRenderer();
r.setColor(colors[i]);
r.setPointStyle(styles[i]);
renderer.addSeriesRenderer(r);
}
} /**
* Sets a few of the series renderer settings.
*
* @param renderer the renderer to set the properties to
* @param title the chart title
* @param xTitle the title for the X axis
* @param yTitle the title for the Y axis
* @param xMin the minimum value on the X axis
* @param xMax the maximum value on the X axis
* @param yMin the minimum value on the Y axis
* @param yMax the maximum value on the Y axis
* @param axesColor the axes color
* @param labelsColor the labels color
*/
protected void setChartSettings(XYMultipleSeriesRenderer renderer, String title, String xTitle,
String yTitle, double xMin, double xMax, double yMin, double yMax, int axesColor,
int labelsColor) {
renderer.setChartTitle(title);
renderer.setXTitle(xTitle);
renderer.setYTitle(yTitle);
renderer.setXAxisMin(xMin);
renderer.setXAxisMax(xMax);
renderer.setYAxisMin(yMin);
renderer.setYAxisMax(yMax);
renderer.setAxesColor(axesColor);
renderer.setLabelsColor(labelsColor);
} /**
* Builds an XY multiple time dataset using the provided values.
*
* @param titles the series titles
* @param xValues the values for the X axis
* @param yValues the values for the Y axis
* @return the XY multiple time dataset
*/
protected XYMultipleSeriesDataset buildDateDataset(String[] titles, List<Date[]> xValues,
List<double[]> yValues) {
XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();
int length = titles.length;
for (int i = 0; i < length; i++) {
TimeSeries series = new TimeSeries(titles[i]);
Date[] xV = xValues.get(i);
double[] yV = yValues.get(i);
int seriesLength = xV.length;
for (int k = 0; k < seriesLength; k++) {
series.add(xV[k], yV[k]);
}
dataset.addSeries(series);
}
return dataset;
} /**
* Builds a category series using the provided values.
*
* @param titles the series titles
* @param values the values
* @return the category series
*/
protected CategorySeries buildCategoryDataset(String title, double[] values) {
CategorySeries series = new CategorySeries(title);
int k = 0;
for (double value : values) {
series.add("Project " + ++k, value);
} return series;
}
解决方案 »
- 启动不了android模拟器
- 请教:android能否编写可隐藏到后台运行的程序?
- 菜鸟的我想做以下简单效果,但始终没概念,谁能帮帮忙!!
- restartPackage骗人呢,有没有可以真正重新启动的函数?
- 求教:froyo 中如何启动overlays.cpp中的main()函数
- Android 是否可以支持 JSR 177.?
- 怎样写这个xml布局?入门级的问题
- 请问 Android照相返回结果处理 当照第二次的时候 之前的数据会被清空
- 怎么解析json数组数据?求帮忙,百度好久了都不行。
- fiddle 发http请求443,https请求没问题
- MP3播放器的错误,请大神知道,感激不尽
- 关于addContentView(view, params)
* Builds a multiple category series using the provided values.
*
* @param titles the series titles
* @param values the values
* @return the category series
*/
protected MultipleCategorySeries buildMultipleCategoryDataset(String title,
List<String[]> titles, List<double[]> values) {
MultipleCategorySeries series = new MultipleCategorySeries(title);
int k = 0;
for (double[] value : values) {
series.add(2007 + k + "", titles.get(k), value);
k++;
}
return series;
} /**
* Builds a category renderer to use the provided colors.
*
* @param colors the colors
* @return the category renderer
*/
protected DefaultRenderer buildCategoryRenderer(int[] colors) {
DefaultRenderer renderer = new DefaultRenderer();
renderer.setLabelsTextSize(15);
renderer.setLegendTextSize(15);
renderer.setMargins(new int[] { 20, 30, 15, 0 });
for (int color : colors) {
SimpleSeriesRenderer r = new SimpleSeriesRenderer();
r.setColor(color);
renderer.addSeriesRenderer(r);
}
return renderer;
} /**
* Builds a bar multiple series dataset using the provided values.
*
* @param titles the series titles
* @param values the values
* @return the XY multiple bar dataset
*/
protected XYMultipleSeriesDataset buildBarDataset(String[] titles, List<double[]> values) {
XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();
int length = titles.length;
for (int i = 0; i < length; i++) {
CategorySeries series = new CategorySeries(titles[i]);
double[] v = values.get(i);
int seriesLength = v.length;
for (int k = 0; k < seriesLength; k++) {
series.add(v[k]);
}
dataset.addSeries(series.toXYSeries());
}
return dataset;
} /**
* Builds a bar multiple series renderer to use the provided colors.
*
* @param colors the series renderers colors
* @return the bar multiple series renderer
*/
protected XYMultipleSeriesRenderer buildBarRenderer(int[] colors) {
XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer();
renderer.setAxisTitleTextSize(16);
renderer.setChartTitleTextSize(20);
renderer.setLabelsTextSize(15);
renderer.setLegendTextSize(15);
int length = colors.length;
for (int i = 0; i < length; i++) {
SimpleSeriesRenderer r = new SimpleSeriesRenderer();
r.setColor(colors[i]);
renderer.addSeriesRenderer(r);
}
return renderer;
}}IDemoChart:
package irdc.ex07_15;
import android.content.Context;
import android.content.Intent;/**
* Defines the demo charts.
*/
public interface IDemoChart {
/** A constant for the name field in a list activity. */
String NAME = "name";
/** A constant for the description field in a list activity. */
String DESC = "desc"; /**
* Returns the chart name.
*
* @return the chart name
*/
String getName(); /**
* Returns the chart description.
*
* @return the chart description
*/
String getDesc(); /**
* Executes the chart demo.
*
* @param context the context
* @return the built intent
*/
Intent execute(Context context);}
我在AbstractDemoChart类中继承了Activity类会不会有影响,菜鸟一枚求大神指教,万分感谢