使用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;
  }

解决方案 »

  1.   

    /**
       * 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类会不会有影响,菜鸟一枚求大神指教,万分感谢