Java Test: MakeBinPicture

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Java Test: MakeBinPicture

    Quellcode

    1. import java.io.*;
    2. import java.util.Scanner;
    3. import java.util.Formatter;
    4. /**
    5. *
    6. * @author Torben Brodt
    7. * @version 1.0
    8. *
    9. * <p />Liest Datei A - und schreibt in B
    10. */
    11. public class MakeBinPicture {
    12. /**
    13. * @param args
    14. * args[0] -> Quelle
    15. * args[1] -> Ziel
    16. * args[2] -> Grauwert (threshold)
    17. */
    18. public static void main(String[] args) throws IOException {
    19. System.out.println("Beginn");
    20. //Fehlerabfragen
    21. assert (args.length == 3) :
    22. "Ungültige Eingabe";
    23. String source = args[0], dest = args[1];
    24. int threshold = Integer.parseInt(args[2]);
    25. //Versuche die Dateioperationen
    26. try {
    27. int count=0;
    28. Scanner sc1 = new Scanner(new File(source));
    29. while(sc1.hasNext()) {
    30. sc1.next();
    31. count++;
    32. }
    33. System.out.println(count+" Integer Werte gezählt");
    34. sc1.close();
    35. int[] a = new int[count];
    36. int j=0;
    37. String[] header = new String[5];
    38. // Öffne Quelldatei um den Inhalt zu lesen
    39. Scanner sc2 = new Scanner(new File(source));
    40. //sc2.useLocale();
    41. for(int i=0; i<count-1; i++) {
    42. if(i>4) {
    43. j++;
    44. a[j] = Integer.parseInt(sc2.next());
    45. } else {
    46. header[i] = sc2.next();
    47. }
    48. }
    49. System.out.println("Bild gelesen");
    50. sc2.close();
    51. //Aendere schwarz weiß
    52. threshold(a, threshold);
    53. System.out.println("Bild manipuliert");
    54. //Öffne Zieldatei um den verarbeiteten Inhalt zu schreiben
    55. Formatter output = new Formatter(new File(dest));
    56. output.format(header[0]+"\n#"+dest+"\n"+header[2]+" "+header[3]+"\n1\n");
    57. for (int wert : a)
    58. output.format(wert+"\n");
    59. output.close();
    60. System.out.println("Bild geschrieben");
    61. }
    62. catch(FileNotFoundException e) {
    63. System.out.println("Fehler: Quelldatei existiert nicht");
    64. System.exit(1);
    65. } /*catch(NumberFormatException e) {
    66. System.out.println("Fehler: Die Quelldatei enthält darf ausschließlich Integer enthalten");
    67. System.exit(1);
    68. } catch(Exception e) {
    69. System.out.println("Fehler: Ein unbekannter Fehler ist aufgetreten");
    70. System.exit(1);
    71. }*/
    72. }
    73. /**
    74. * Aendert werte auf 0 oder 1.. je nachdem wo threshold liegt
    75. */
    76. static void threshold(int[] a, int threshold)
    77. {
    78. for(int i=0; i<a.length; i++)
    79. if(a[i] < threshold)
    80. a[i] = 0;
    81. else
    82. a[i] = 1;
    83. }
    84. }
    Alles anzeigen
  • Quellcode

    1. import java.io.File;
    2. import java.io.FileNotFoundException;
    3. import java.util.Formatter;
    4. import java.util.Scanner;
    5. /**
    6. * <p>
    7. * <b>Organisation:</b> FH-Wiesbaden<br>
    8. * <b>Homepage:</b> <a href="http://www.fh-wiesbaden.de">www.fh-wiesbaden.de</a><br>
    9. * <b>Fachbereich:</b> 06 - Meieninformatik<br>
    10. * </p>
    11. * <p>
    12. * <b>Entwickler:</b> Berntheisel, Stefan<br>
    13. * <p>
    14. * <b>Programm:</b><i> Online Test - Aufgabe 3 </i><br>
    15. * </p>
    16. *
    17. * @author sbern001 (Username)
    18. * @version 1.0
    19. * @docRoot .
    20. */
    21. public class MakeBinPicture
    22. {
    23. /**
    24. * Kommandozeilenparameter
    25. * @param args
    26. */
    27. public static void main(String[] args)
    28. {
    29. String in_filename = "";
    30. String out_filename = "";
    31. int threshold = 0;
    32. try
    33. {
    34. in_filename = args[0];
    35. out_filename = args[1];
    36. threshold = Integer.parseInt(args[2]);
    37. }
    38. catch (Exception e)
    39. {
    40. System.out.printf("Bitte ueberpruefen Sie die Kommandozeilenparameter!\n\n");
    41. System.exit(-1);
    42. }
    43. int integer_cell[][] = readCellFile(in_filename);
    44. if(integer_cell.length == 0)
    45. {
    46. System.err.printf("Die Datei \"%s\" kann nicht gelesen werden!\n",in_filename);
    47. System.exit(-1);
    48. }
    49. erstelleDatei(pgmFormat(integer_cell, threshold), out_filename, true);
    50. }
    51. /**
    52. * Methode pgmFormat
    53. * @param daten Enthaelt die Bilddaten (Matrix)
    54. * @param max_grey Enthaelt den max. Grauwert
    55. * @return Gibt einen String-Array im PGM-Format zurueck
    56. */
    57. static String[] pgmFormat(int daten[][], int threshold)
    58. {
    59. String pgm[] = new String[daten.length+3];
    60. // PGM - ASCII Format
    61. pgm[0] = "P2";
    62. // PGM - Breite und Hoehe
    63. pgm[1] = daten[0].length + " " + daten.length;
    64. // PGM - Max_Grey (+1 wegen Irfanview_Bug)
    65. // pgm[2] = threshold + 1 + "";
    66. pgm[2] = "1";
    67. for(int i = 0; i < daten.length; i++)
    68. {
    69. pgm[i+3] = "";
    70. for(int j = 0; j < daten[0].length; j++)
    71. {
    72. if(daten[i][j] < threshold) pgm[i+3] += "0";
    73. else pgm[i+3] += "1";
    74. if(j < daten[0].length - 1) pgm[i+3] += " ";
    75. }
    76. }
    77. return pgm;
    78. }
    79. /**
    80. * Methode: erstelleDatei
    81. * @param daten Enthaelt die einzelnen Zeilen fuer die zu erstellende Datei
    82. * @param dateiname Enthaelt den Dateinamen (Pfad)
    83. * @param overwrite Enthaelt das Flag fuer einen Dateischutz (¸berschreiben einer vorhandenen Datei)
    84. * @return 1 bei erflogreichen anlegen der Datei
    85. */
    86. static int erstelleDatei(String daten[], String dateiname, boolean overwrite)
    87. {
    88. try
    89. {
    90. File datei = new File(dateiname);
    91. Formatter datei_Formatter = new Formatter(datei);
    92. if(datei.exists() && !overwrite) return 0;
    93. for(int i = 0; i < daten.length; i++)
    94. {
    95. datei_Formatter.format("%s\n",daten[i]);
    96. }
    97. datei_Formatter.close();
    98. return 1;
    99. }
    100. catch(FileNotFoundException e) { return -1; }
    101. }
    102. /**
    103. * Methode: readCellFile
    104. * @param filename Dateiname der Zellenmatrix
    105. * @return Zellenmatrix
    106. */
    107. static int[][] readCellFile(String filename)
    108. {
    109. int x,y;
    110. int null_cell[][] = new int[0][0];
    111. try
    112. {
    113. File file = new File(filename);
    114. if(!file.exists() || !file.canRead()) return null_cell;
    115. Scanner sc = new Scanner(file);
    116. // Ueberspringt die ersten beiden Zeilen der PGM Datei
    117. sc.nextLine();
    118. sc.nextLine();
    119. x = sc.nextInt();
    120. y = sc.nextInt();
    121. int cell[][] = new int[x][y];
    122. for(int i = 0; i < x; i++)
    123. for(int j = 0; j < y; j++)
    124. cell[i][j] = sc.nextInt();
    125. return cell;
    126. }
    127. catch(FileNotFoundException e)
    128. {
    129. return null_cell;
    130. }
    131. }
    132. }
    Alles anzeigen