Форум программистов, компьютерный форум, киберфорум
Java
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
 Аватар для Бельфегор
688 / 602 / 139
Регистрация: 08.05.2009
Сообщений: 1,098

Нужна Помощь в переводе кода C#

17.09.2012, 11:20. Показов 1436. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток.

Есть метод на на c#. Нужно перевести на java. проблема в разнице типов byte между java и c#.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
 private byte[] getLine(Bitmap bitmap, int row)
        {
            int w = bitmap.Width;
            int mod8 = (bitmap.Width % 8);
            if (mod8 > 0)
                w = w + (8 - mod8);
            int width = (w / 8);
            byte[] b = new byte[width];
            byte k = 0;
            int x = 1;
            int idx = 0;
            Color c;
            c = bitmap.GetPixel(0, row);
            if (c.R == 0)
                k += (byte)x;
            for (int i = 1; i < bitmap.Width; i++)
            {
                if ((i % 8) == 0)
                {
                    b[idx] = k;
                    k = 0;
                    x = 128;
                    idx++;
                }
                else
                {
                    x /= 2;
                }
                c = bitmap.GetPixel(i, row);
                if (c.R == 0)//It could be R,G or B
                {
                    k += (byte)x;
                }
            }
            return b;
        }
Всем заранее спасибо.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.09.2012, 11:20
Ответы с готовыми решениями:

Нужна помощь в переводе довичного кода в десятичный
Нужно написать программу, которая переводит восьмиразрядное двоичное число в десятичное!

Нужна помощь в переводе кода программы из VB.NET в VB 6.0
Здравствуйте.У меня есть код к задаче (решения задачи методом Ньютона ) только для VB.NET,а в 6.0 версию не шарю как первести.Говорят для...

Нужна помощь в написании кода
Есть документ в котором есть поля :Сотрудник(ссылка на справочник сотрудники),проект(ссылка на справочник...

6
 Аватар для mutagen
2587 / 2260 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
17.09.2012, 12:30
замените на short или int и всё заработает
1
 Аватар для Бельфегор
688 / 602 / 139
Регистрация: 08.05.2009
Сообщений: 1,098
17.09.2012, 12:37  [ТС]
Спасибо.
Но возвращаемый этим методом массив далее записывается в DataOutputStream его методом write. Не Подскажите пожалуйста как быть с этим.
0
 Аватар для mutagen
2587 / 2260 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
17.09.2012, 12:39
если вы опишете что должно быть на входе и на выходе, тогда получится подсказать, а пока я могу только предполагать и скорее всего ошибусь
1
 Аватар для Бельфегор
688 / 602 / 139
Регистрация: 08.05.2009
Сообщений: 1,098
17.09.2012, 12:48  [ТС]
Задача в том, чтобы перевести Bitmap в PCL (printer control language).

В C# код работает нормально, однако после перевода на java все пошло на перекосяк.
Вот код:

метод конвертации bitmap в pcl
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
private bool saveAsPCL(Bitmap bmp)
        {
            try
            {
                int width = bmp.Width;
                int height = bmp.Height;
 
                //Resize width so it has a multiple of 8 bits
                int mod8 = (width % 8);
                if (mod8 > 0)
                    width += 8 - mod8;
                Size size = new Size(width, height);
 
                char ESC = (char)27;
                string SESC = Convert.ToString(ESC);
                String cGraphicsBegin = ESC + "*r0F" + ESC + "*t0200R" + ESC + "*r1A";
                String cGraphicsChunk = ESC + "*b{0}W{1}"; // the number of bytes in the chunk must replace "%d"
                String cGraphicsEnd = ESC + "*rB";
 
                FileStream fs = new FileStream("c:\\1.pcl", FileMode.Create, FileAccess.Write);
                BinaryWriter bw = new BinaryWriter(fs);
 
                int vBytesInGraphicRow = (width / 8);
 
                writeString(bw, cGraphicsBegin);
                int bitmapHeight = bmp.Height;
                for (int i = 0; i < (bitmapHeight - 1); i++)
                {
                    byte[] line = getLine(bmp, i);
                    String s = ESC + "*b" + line.Length + "W";
                    writeString(bw, s);
                    bw.Write(line);
                }
 
                writeString(bw, cGraphicsEnd);
                bw.Close();
                fs.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
                return false;
            }
            return true;
        }

Выше описанный метод использует метод getLine для парсинга одной строки. Так же используется метод writeString для записи текста
метод writeString
C#
1
2
3
4
5
private void writeString(BinaryWriter bw, String s)
        {
            foreach (char c in s)
                bw.Write(c);
        }


на java реализовал так

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
public class BitmapToPCLConverter {
    
    
    private static byte[] getLine(Bitmap bitmap, int row)
    {        
        int w = bitmap.getWidth();
        int mod8 = (bitmap.getWidth() % 8);
        if (mod8 > 0)
        {
            w = w + (8 - mod8);
        }
        int width = (w / 8);
        byte[] b = new byte[width];
        byte k = 0;
        int x = 1;
        int idx = 0;
        int c = bitmap.getPixel(0, row);
        
        if (c!=0)
        {
            k += (byte)x;
        }
        for (int i = 1; i < bitmap.getWidth(); i++)
        {
            if ((i % 8) == 0)
            {
                b[idx] = k;
                k = 0;
                x = 128;
                idx++;
            }
            else
            {
                x /= 2;
            }
            c = bitmap.getPixel(i, row);
            if (c!=0)//It could be R,G or B
            {
                k += (byte)x;
            }
        }
        for(int i=0;i<b.length;i++)
        {
            
        }
        return b;
    }
    
    private static void writeString(DataOutputStream os, String s)
    {
        for(int i=0;i<s.length();i++)
        {
            try 
            {
                os.write(s.charAt(i));
            } 
            catch (IOException e)
            {
                continue;
            }
        }
    }
    public static byte[] GetPCLFromBitmapSaveToFile(Bitmap bmp)
    {
        try
        {
            ByteArrayOutputStream  bs =new ByteArrayOutputStream();
            DataOutputStream os = new DataOutputStream(bs);
                        
          
            
            String cGraphicsBegin = "\033" + "*r0F" + "\033" + "*t0200R" +"\033%-12345X@PJL Enter Language = PCL\033E\033*r1A";
            String cGraphicsEnd = "\033*rB\033%-12345X";
            
            writeString(os, cGraphicsBegin);
            int bitmapHeight = bmp.getHeight();
            for (int i = 0; i < (bitmapHeight - 1); i++)
            {
                byte[] line = getLine(bmp, i);
                String s = "\033*b" + line.length + "W";
                writeString(os, s);                
                os.write(line);
            }
            writeString(os, cGraphicsEnd);          
            os.close();
            
            FileOutputStream fs = new FileOutputStream(Environment.getExternalStorageDirectory()+"/SomeFolder/report1.pcl");
            fs.write(bs.toByteArray());
            fs.close();
            
            return bs.toByteArray();
        }
        catch (Exception ex)
        {
            return null;
        }
    }
Добавлено через 1 минуту
В C# тип byte unsigned, а в java насколько знаю signed. Думаю проблема в этом.
0
 Аватар для mutagen
2587 / 2260 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
17.09.2012, 13:06
я думаю в Вашем случае ещё проблемы с кодировкой строки которую вы выводите как байт массив. В java всё по умолчанию UTF-16 и если вы не сконвертируете строку в нужную вам кодировку, то она попытается по умолчанию сконвертироваться в системную по умолчанию

гетлайн написан исходя из размера 255, и явовский байт его режет до 128, если воспользоваться типом short, то по идее всё должно заработать с небольшим оверхедом

либо bs.toByteArray() переписать так чтобы он смещал значение соответственно C#
1
 Аватар для Бельфегор
688 / 602 / 139
Регистрация: 08.05.2009
Сообщений: 1,098
17.09.2012, 13:11  [ТС]
Цитата Сообщение от mutagen Посмотреть сообщение
я думаю в Вашем случае ещё проблемы с кодировкой строки которую вы выводите как байт массив. В java всё по умолчанию UTF-16 и если вы не сконвертируете строку в нужную вам кодировку, то она попытается по умолчанию сконвертироваться в системную по умолчанию
Могу переконвертировать в UTF-8, но не думаю что проблема в этом.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.09.2012, 13:11
Помогаю со студенческими работами здесь

Нужна помощь в валидации HTML-кода
Здравствуйте уважаемые форумчане. Прошедшие 2 дня занимался валидацией кода своего сайта через &quot;validator.w3.org&quot;, причём...

Xor: нужна помощь в разборе кода
Никак не могу толком разобрать код, помогите пожалуйста понять что именно какая строчка что делает.static void Main(string args) ...

Нужна помощь в исправлении кода одной функции...
Плиз.. помогите исправить код функции 'void Opt()', мне необходимо было создать программу которая читатет файл 'd:\file.txt' , создает и...

Нужна помощь с текстом кода в Access (для выборки и обновления таблицы)
Добрый день! Нужна Ваша помощь. Подскажите, пожайлуста, что в моем коде может быть не так: Private Sub bUpd2_Click() On Error...

Массив: Нужна помощь в реализации кода для ввода симметричной матрицы.
Здравствуйте! Есть программа, которая позволяет пользователю вводить матрицу смежности графа, а так же редактировать её. Так же,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru