2017-10-07 16 views
0

onPreviewFrame에서 일부 이미지 처리를 수행 한 다음 각 프레임의 Y, U 및 V 값을 생성하는 앱을 만듭니다. 그런 다음이 값을 ArrayList에 저장했습니다. 로그에서ArrayList에서 CSV 생성 Android

예 (Y, U, V)

10-08 05:06:10.941 20405-20405/redlight55.com.bpreader D/MyEntryData: [1590690, 2700692, 5731888] 
10-08 05:06:10.998 20405-20405/redlight55.com.bpreader D/MyEntryData: [1610252, 2699200, 5760320] 
10-08 05:06:11.014 20405-20405/redlight55.com.bpreader D/MyEntryData: [1612862, 2700420, 5763556] 
10-08 05:06:11.089 20405-20405/redlight55.com.bpreader D/MyEntryData: [1617378, 2699508, 5770000] 

I는 장치의 내부 저장 장치에 저장 될 것이다 CSV 파일에 이러한 데이터를 저장할. 그들은 같은 것을 저장한다이

enter image description here

이 내가 저장하고 ArrayList에 대한 로그를 생성하고있는 방법이다

@Override 
public void onPreviewFrame(int ySum, int uSum, int vSum) { 
    img_Y_Avg = ySum; 
    img_U_Avg = uSum; 
    img_V_Avg = vSum; 

    //set value of Y on the text view 
    TextView valueOfY = (TextView)findViewById(R.id.valueY); 
    valueY = img_Y_Avg; 
    valueOfY.setText(Double.toString(img_Y_Avg)); 

    //set value of U on the text view 
    TextView valueOfU = (TextView)findViewById(R.id.valueU); 
    valueU = img_U_Avg; 
    valueOfU.setText(Double.toString(img_U_Avg)); 

    //set value of V on the text view 
    TextView valueOfV = (TextView)findViewById(R.id.valueV); 
    valueV = img_V_Avg; 
    valueOfV.setText(Double.toString(img_V_Avg)); 

    //store value to array list 
    ArrayList<Integer> yAverage = new ArrayList<Integer>(); 
    yAverage.add(img_Y_Avg); 
    //Log.d("MyEntryData", String.valueOf(yAverage)); 

    //store u values to array 
    ArrayList<Integer> uAverage = new ArrayList<Integer>(); 
    uAverage.add(img_U_Avg); 
    //Log.d("MyEntryData", String.valueOf(uAverage)); 

    //store u values to array 
    ArrayList<Integer> vAverage = new ArrayList<Integer>(); 
    vAverage.add(img_V_Avg); 
    //Log.d("MyEntryData", String.valueOf(vAverage)); 


    ArrayList<Integer> getValues = new ArrayList<Integer>(); 
    for(int i = 0; i < uAverage.size(); i++) { 
     getValues.add(yAverage.get(i)); 
     getValues.add(uAverage.get(i)); 
     getValues.add(vAverage.get(i)); 
    } 

    Log.d("MyEntryData", String.valueOf(getValues)); 


    handler = new Handler(); 
    final Runnable runnable = new Runnable() { 
     @Override 
     public void run() { 
      readingRemaining = readingRemaining -1; 

      if (readingRemaining > 0){ 
       plotGraph(img_Y_Avg); 
      } 
     } 
    }; 

    handler.postDelayed(runnable, 100); 

    //Log.d("MyEntryData", String.valueOf(img_Y_Avg +" "+ img_U_Avg+" "+img_V_Avg)); 
} 

내가 opencsv 함께 할 것을 시도되었지만 장치 저장소에 생성 된 파일이 없습니다. 내가 어떻게 할 수 있니?

답변

1

CSV는 쉼표로 구분 된 값 파일이므로 씁니다. 이 정답처럼

String filename = "csvfile.csv"; 
FileOutputStream outputStream; 

try { 
    outputStream = openFileOutput(filename, Context.MODE_PRIVATE); 
    for(int i = 0; i < uAverage.size(); i+=3) { 
     outputStream.write((getValues.get(i)+",").getBytes()); 
     outputStream.write((getValues.get(i+1)+",").getBytes()); 
     outputStream.write((getValues.get(i+2)+"\n").getBytes()); 
    } 
    outputStream.close(); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 
+0

에도 여전히 동일한 문제가 있습니다. 내부 저장소에서 파일을 찾을 수 없습니다. 모든 데이터가 미리보기 프레임에서 생성되면 파일이 저장되므로 if 문을 추가하여 카메라가 null인지 확인합니다. 아직도 내부 저장 장치 안에 타일을 넣지 않습니다. – Mill3r

1
String filename = "csvfile.csv"; 

    File directoryDownload = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS); 
    File logDir = new File (directoryDownload, "bpReader"); //Creates a new folder in DOWNLOAD directory 
    logDir.mkdirs(); 
    File file = new File(logDir, filename); 

    FileOutputStream outputStream = null; 
    try { 
      outputStream = new FileOutputStream(file, true); 
      //outputStream = openFileOutput(filename, Context.MODE_PRIVATE); 
      for (int i = 0; i < uAverage.size(); i += 3) { 
       outputStream.write((getValues.get(i) + ",").getBytes()); 
       outputStream.write((getValues.get(i + 1) + ",").getBytes()); 
       outputStream.write((getValues.get(i + 2) + "\n").getBytes()); 

      } 
      outputStream.close(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

보인다. Shmuel이 게시 한 답변을 통해 파일을 만들고 원하는대로 열을 나눌 수있었습니다. 그러나, 나는 외부 저장소에 파일 디렉토리를 선언해야합니다.

문제는 휴대 전화에만 내부 저장 용량이 있다는 것입니다. 그래서 내부 스토리지에 저장하기 위해 뭔가를해야한다고 생각했습니다. 내가 잘못 생각할 수도 있지만 전화기에 내부 저장 장치 만 있으면 실제로 외부 저장 장치로 작동합니다.

나는 이것에 완전히 틀릴지도 모르지만 나에게 그것은 그것이 같았던 것이다.

+1

매니페스트에 WRITE_EXTERNAL_STORAGE 권한을 추가하십시오. Environment.getExternalStorageState()를 사용하여 폴더 가져 오기 – Shmuel