Назад | Начало урока | Вперед
Содержание

Глава 1 (продолжение 1)

Выводим в файл

Эта программа выведет в текстовый файл преобразованное содержимое bmp-файла без префикса.
Это по сути не что иное как картинка текста.


/** Program from Albert Volos May 2010
* (C) "Распознаватель Текста"
* Автор: Альберт Волос (e-mail: pick4you@yandex.ru)
* http://www.pick4you.narod.ru
*
**/
import java.io.*;
import java.text.*;
import java.lang.*;
import java.util.*;
import javagently.*;

class Filter{

int chislo;
char first_val, second_val;

Filter(int i, char f, char s){

chislo = i;
first_val = f;
second_val = s;
}
void funFilter(Filter o){
int rez_h = 0;
int rez_l = 0;

rez_h = chislo/16;
if(rez_h>9){

switch(rez_h){
case 10 :
first_val = 'A'; break;
case 11 :
first_val = 'B'; break;
case 12 :
first_val = 'C'; break;
case 13 :
first_val = 'D'; break;
case 14 :
first_val = 'E'; break;
case 15 :
first_val = 'F'; break;
default: break;
}
}
else{
switch(rez_h){
case 0 :
first_val = '0'; break;
case 1 :
first_val = '1'; break;
case 2 :
first_val = '2'; break;
case 3 :
first_val = '3'; break;
case 4 :
first_val = '4'; break;
case 5 :
first_val = '5'; break;
case 6 :
first_val = '6'; break;
case 7 :
first_val = '7'; break;
case 8 :
first_val = '8'; break;
case 9 :
first_val = '9'; break;
default: break;
}
}
rez_l = chislo%16;
if(rez_l>9){
switch(rez_l){
case 10 :
second_val = 'A'; break;
case 11 :
second_val = 'B'; break;
case 12 :
second_val = 'C'; break;
case 13 :
second_val = 'D'; break;
case 14 :
second_val = 'E'; break;
case 15 :
second_val = 'F'; break;
default: break;
}
}
else{
switch(rez_l){
case 0 :
second_val = '0'; break;
case 1 :
second_val = '1'; break;
case 2 :
second_val = '2'; break;
case 3 :
second_val = '3'; break;
case 4 :
second_val = '4'; break;
case 5 :
second_val = '5'; break;
case 6 :
second_val = '6'; break;
case 7 :
second_val = '7'; break;
case 8 :
second_val = '8'; break;
case 9 :
second_val = '9'; break;
default: break;
}
}
}
}//end class

class TextMatrix {

public static void main(String args[]) throws Exception {
InputStream f = new FileInputStream("bukva.bmp");
int size = 0;
size = f.available();
System.out.println("size: " + size);

int n = size;
byte b[] = new byte[n];
if (f.read(b) != n) {

System.err.println("couldn't read " + n + " bytes.");
}
else{
System.out.println("Ok " + n + " bytes.");
}
Vector v = new Vector(size);
for(int i =0; i < size;i++){
v.addElement(new Byte(b[i]));
}
System.out.println("Vector size: " + v.size());

f.close(); //

/////////////////////////////////////////////////
int temp = 0;
int temp_l = 0;
int temp_h = 0;
int size_file = 0; //размер исходного bmp-файла (2-й, 3-й байты)
int chislo_str = 0; //размер картинки в байтах (34-й, 35-й байты)
int size_card = 0; //количество строк в картинке (22-й, 23-й байты)
int dlina_str = 0; //длина строки в выходном файле

Byte I_temp;
Byte I_temp_h;
Byte I_temp_l;

//Считаем префикс графического файла
//--------------------------------
I_temp_l =(Byte) v.elementAt(2);
temp_l = I_temp_l.intValue();
if(temp_l<0)

temp_l = 256+temp_l;
I_temp_h =(Byte) v.elementAt(3);
temp_h = I_temp_h.intValue();
if(temp_h<0)
temp_h = 256+temp_h;
temp_h = 256*temp_h;
size_file = temp_h+temp_l;

I_temp_l = (Byte)v.elementAt(22);
temp_l = I_temp_l.intValue();
if(temp_l<0)
temp_l = 256+temp_l;
I_temp_h = (Byte)v.elementAt(23);
temp_h = I_temp_h.intValue();
if(temp_h<0)
temp_h = 256+temp_h;
temp_h = 256*temp_h;
chislo_str = temp_h+temp_l;

I_temp_l = (Byte)v.elementAt(34);
temp_l = I_temp_l.intValue();
if(temp_l<0)

temp_l = 256+temp_l;
I_temp_h = (Byte)v.elementAt(35);
temp_h = I_temp_h.intValue();
if(temp_h<0)
temp_h = 256+temp_h;
temp_h = 256*temp_h;
size_card = temp_h+temp_l;

dlina_str = size_card/chislo_str;
//-------------------------------------------------

System.out.println("size_file " + size_file);
System.out.println("chislo_str " + chislo_str);
System.out.println("size_card " + size_card);
System.out.println("dlina_str " + dlina_str);


Stream fout= new Stream ("data.out",Stream.WRITE);

int k = 0;
for(int i=54;i < size_file;i++){

I_temp =(Byte) v.elementAt(i);
temp = I_temp.intValue();
if(temp<0)
temp = 256+temp;
int iTest = temp;
char chTest1 = ' ';
char chTest2 = ' ';

Filter ob = new Filter(iTest,chTest1,chTest2);
ob.funFilter(ob);

fout.print(ob.first_val);
fout.print(ob.second_val);
k++;
if(k==dlina_str){
k=0;
fout.println("");
}
}
fout.close();
}
}

Здесь все нормально вывелось в файл.
Программа этапная.

Здесь правильный вывод благодаря классу Stream, который находится в директории
javagently. И в начале файла присутствует инструкция import javagently.*;
Класс Stream взят нами из трудов Бишоп.

Например букву 'A' программа выведет в таком виде:

Подсказка

Перенос строк в текстовом файле программа сделала автоматически. Благодаря чему рисунок буквы сразу выглядит правильно.

Программа находится:
D:\Ency_Языки_Программир\Ency_Java\Распознавание образов\Программы01_07\Программы01\Prog11>

Разумеется класс Filter следует поместить в отдельный файл и подключить этот файл
к программе посредством инструкции include. Этот вариант программы в файле:
D:\Ency_Языки_Программир\Ency_Java\Распознавание образов\Программы01_07\Программы01\Prog13>

Отладочные выводы на консоль System.out.println тоже удобнее заремировать.

Еще был первоначальный вариант программы с использованием для вывода потока OutputStream. Но этот вариант не так удобен, как тот, что показан в программе выше, потому что не делает правильный перенос строки в файле :


OutputStream f1 = new FileOutputStream("file2.txt");

int k = 0;
for(int i=54;i < size_file;i++){
I_temp =(Byte) v.elementAt(i);
temp = I_temp.intValue();
if(temp<0)
temp = 256+temp;
System.out.print(" " + temp);

int iTest = temp;
char chTest1 = ' ';
char chTest2 = ' ';

Filter ob = new Filter(iTest,chTest1,chTest2);

ob.funFilter(ob);

f1.write(ob.first_val);
f1.write(ob.second_val);
k++;
if(k==dlina_str){

k=0;
f1.write('\n');
System.out.print('\n');
}
}

f1.close();


В этом фрагменте программа вывела букву А в файл и на консоль.
На консоли есть перенос строки, а в файле
перенос строки не поддерживается, хотя ставлю '\n'

Назад | Начало урока | Вверх | Вперед
Содержание

Hosted by uCoz