Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 62, средняя оценка - 4.81
one050704
1 / 1 / 0
Регистрация: 02.06.2009
Сообщений: 104
#1

Конвертировать bmp файл в txt - C++

27.07.2010, 19:29. Просмотров 8045. Ответов 24
Метки нет (Все метки)

Необходимо написать программу для конвертации монохромного bmp файла, в файл txt, где содержимое будет в виде ascii кодов в 16- ричном виде.
В-общем думается для начала открыть bmp файл для чтения, читать побитно, открыть для записи txt файл, каждый бит bmp менять на ascii коды в hex формате и записать все это в txt. Господа формучане, как думаете это есть верный алгоритм?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.07.2010, 19:29
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Конвертировать bmp файл в txt (C++):

В папке К2 создайте файл t3.txt, в который перепишите вначале текст из файла t1.txt, а затем из t2.txt - C++
Программным путем: 1. В папке С:\temp создайте папки К1 и К2. 2. В папке К1: a) создайте файл t1.txt, в который запишите следующий...

Переписать все числа из файлов 1.txt и 2.txt в файл 3.txt - C++
Здравствуйте! Нужна помощь. Есть два текстовых файла 1.txt и 2.txt в них есть числа. реализовать консольное приложение которое...

Найти минимальное и максимальное числа из input.txt и записать его в файл output.txt - C++
Еще раз приветствую дорогие программисты.Надеюсь на вашу помощь. Найти минимальное и максимальное числа из input.txt и записать его в...

Считать 10 целых чисел с файла 1.txt и записать в файл 2.txt максимальный элемент и его индекс - C++
нужно считать 10 целых чисел с файла 1.txt и записать в файл 2.txt максимальный элемент и его индекс я начала делать, но в файл 2.txt...

Исправить программу, чтоб считывала текст из файла Input.txt и выводит в файл Output.txt - C++
Даны координаты центра и радиус R окружности, координаты точки. Найти точки пересечения касательных с окружностью input.txt 1 1 1 2 2...

Переписать данные файла input.txt в файл output.txt, отсортировать их в алфавитном порядке по фамилии - C++
Народ меня тут 11 задач мне нужно их подробно прокомментировать какая строчка что делает(пример первая задача) помогите плиз кому не...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
D@rkD@iver
111 / 111 / 3
Регистрация: 01.10.2008
Сообщений: 876
27.07.2010, 19:33 #2
one050704, во-первых не побаино а побайтно
ну да это верный алогоритм в txt файле у тебя будет hex бинарника, только нпонятно зачем тебе это надо
one050704
1 / 1 / 0
Регистрация: 02.06.2009
Сообщений: 104
27.07.2010, 19:42  [ТС] #3
Цитата Сообщение от D@rkD@iver Посмотреть сообщение
one050704, во-первых не побаино а побайтно
ну да это верный алогоритм в txt файле у тебя будет hex бинарника, только нпонятно зачем тебе это надо
Для освоения языка Си, думается. Насчет байтов, вы правы. Вот незадача как считать все пиксели изображения? Завести одномерный массив типа int для пикселей(количество пикселей высчитать вручную исходя из разрешения картинки), завести цикл пока не будет EOF байты просто переписать под hex(используя fwrite)?
D@rkD@iver
111 / 111 / 3
Регистрация: 01.10.2008
Сообщений: 876
27.07.2010, 19:47 #4
one050704, а вы знаете что bmp файл состоит не только из описания пикселей
у него еще есть заголовки
поищите в интернете "Структура bmp файла"
а если вам нужно весь файл(включая заголовки), то да берете по байту пока не EOF и сразу переводите в hex
Nameless One
Эксперт С++
5771 / 3420 / 255
Регистрация: 08.02.2010
Сообщений: 7,447
27.07.2010, 19:52 #5
Как-то так:
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
#include <iostream>
#include <fstream>
 
int main()
{
    char* in = "img.bmp";
    char* out = "out.txt";
    std::ifstream ifs(in);
    if(!ifs)
    {
        std::cerr << "Error opening \"" << in << "\" for input" << std::endl;
        system("pause");
        return EXIT_FAILURE;
    }
    std::ofstream ofs(out);
    if(!ofs)
    {
        std::cerr << "Error opening \"" << out << "\" for output" << std::endl;
        system("pause");
        return EXIT_FAILURE;
    }
    char ch;
    while(ifs.get(ch))
    {
        if(!ifs)
        {
            std::cerr << "Error reading from \"" << in << "\"" << std::endl;
            system("pause");
            return EXIT_FAILURE;
        }
        ofs << "0x" << std::hex << static_cast<int>(ch) << " ";
        if(!ofs)
        {
            std::cerr << "Error writing to \"" << out << "\"" << std::endl;
            system("pause");
            return EXIT_FAILURE;
        }
    }
    system("pause");
    return EXIT_SUCCESS;
}
Читает весь файл.
D@rkD@iver
111 / 111 / 3
Регистрация: 01.10.2008
Сообщений: 876
27.07.2010, 19:54 #6
Nameless One, блин, ну он же сказал что это ему надо для самообчения
нафиг ему твой готовый код? только в рамку вставить и на стенку повесить
Nameless One
Эксперт С++
5771 / 3420 / 255
Регистрация: 08.02.2010
Сообщений: 7,447
27.07.2010, 19:56 #7
Цитата Сообщение от D@rkD@iver Посмотреть сообщение
Nameless One, блин, ну он же сказал что это ему надо для самообчения
нафиг ему твой готовый код? только в рамку вставить и на стенку повесить
Так он собирался на С писать, а это С++. Так что не вижу, в чем проблема.
D@rkD@iver
111 / 111 / 3
Регистрация: 01.10.2008
Сообщений: 876
27.07.2010, 19:58 #8
Nameless One, не в этом суть...
суть в том что он новичок и хочет учиться, просто вы зря эту прогу писали
5 минут на работе потеряны зря
Nameless One
27.07.2010, 20:05
  #9

Не по теме:

Ничего такого, что не обсуждалось бы уже в этой теме, в моей программе нет. А было, напомню:

Цитата Сообщение от one050704 Посмотреть сообщение
открыть bmp файл для чтения, читать побитно, открыть для записи txt файл, каждый бит bmp менять на ascii коды в hex формате и записать все это в txt
Таким образом, мой код на С++ можно рассматривать как форму записи вышеприведенного алгоритма. А для записи этого алгоритма на С топикстартеру придется использовать уже другие средства.

one050704
1 / 1 / 0
Регистрация: 02.06.2009
Сообщений: 104
28.07.2010, 07:28  [ТС] #10
Добавлено через 25 секунд
Цитата Сообщение от D@rkD@iver Посмотреть сообщение
Nameless One, блин, ну он же сказал что это ему надо для самообчения
нафиг ему твой готовый код? только в рамку вставить и на стенку повесить
Честно говоря, не понял листинга что выше т.к. Си, а уж тем более С++ не особо владею.
Но спасибо, он как наглядное пособие, попробую его разобрать(операторы незнакомые в нем), ну и написать свою программу.

Добавлено через 9 часов 26 минут
Нашел прототип функции fwrite:
C
1
size_t fwrite(const void *буфер, size_t колич_байт, size_t счетчик, FILE *указатель файла);
Не понимаю 1 . size_t счетчик - это по сколько байт записывать? 2. size_t колич_байт - общее количество байт, которое надо записать?
И самое не понятное 3. const void *буфер, что это за буфер? В некоторых примерах там указаны адреса переменных, т.е. то, что надо записать в файл. А в моем случае что указать?
Nameless One
Эксперт С++
5771 / 3420 / 255
Регистрация: 08.02.2010
Сообщений: 7,447
28.07.2010, 07:37 #11
C++
1
2
3
4
5
6
size_t fwrite(
   const void *buffer,
   size_t size,
   size_t count,
   FILE *stream 
);
Параметры:
Код
buffer - Pointer to data to be written.

size - Item size in bytes.

count - Maximum number of items to be written.

stream - Pointer to FILE structure.
Функция возвращает количество записанных символов.
  1. buffer - указатель на данные, которые нужно записать в поток.
  2. size - можно оставить sizeof(char) (это размер в байтах одного элемента записываемого массива)
  3. count - максимальное число записываемых символов
  4. stream - указатель на структуру FILE
Вот пример использования:
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
// crt_fread.c
// This program opens a file named FREAD.OUT and
// writes 25 characters to the file.  It then tries to open
// FREAD.OUT and read in 25 characters.  If the attempt succeeds,
// the program displays the number of actual items read.  
#include <stdio.h>
 
int main( void )
{
   FILE *stream;
   char list[30];
   int  i, numread, numwritten;
 
   // Open file in text mode:
   if( fopen_s( &stream, "fread.out", "w+t" ) == 0 )
   {
      for ( i = 0; i < 25; i++ )
         list[i] = (char)('z' - i);
      // Write 25 characters to stream 
      numwritten = fwrite( list, sizeof( char ), 25, stream );
      printf( "Wrote %d items\n", numwritten );
      fclose( stream );
 
   }
   else
      printf( "Problem opening the file\n" );
 
   if( fopen_s( &stream, "fread.out", "r+t" ) == 0 )
   {
      // Attempt to read in 25 characters 
      numread = fread( list, sizeof( char ), 25, stream );
      printf( "Number of items read = %d\n", numread );
      printf( "Contents of buffer = %.25s\n", list );
      fclose( stream );
   }
   else
      printf( "File could not be opened\n" );
}
D@rkD@iver
111 / 111 / 3
Регистрация: 01.10.2008
Сообщений: 876
28.07.2010, 07:40 #12
one050704,
1. кол-во байт- размер одного элемента (char- 1; int- 4 и т.д.)
2. счетчик- сколько элментов надо записать
3. буфер- это указатель на блок памяти откуда будет записываться

допустим у тебя есть строка
char str [1000];
тебе нужно записать 32 символа
ты пишешь так
C++
1
fwrite(str, sizeof(char), 32, f);
one050704
1 / 1 / 0
Регистрация: 02.06.2009
Сообщений: 104
28.07.2010, 08:10  [ТС] #13
Цитата Сообщение от D@rkD@iver Посмотреть сообщение
one050704,
C++
1
fwrite(str, sizeof(char), 32, f);
Ура, что-то записано в файл. А как вставить можно спецификацию типа %x, чтобы перевести все 16 ричный вид?
Nameless One
Эксперт С++
5771 / 3420 / 255
Регистрация: 08.02.2010
Сообщений: 7,447
28.07.2010, 08:13 #14
Использовать не fwrite, а fprintf.
D@rkD@iver
111 / 111 / 3
Регистрация: 01.10.2008
Сообщений: 876
28.07.2010, 08:14 #15
one050704, для этого используй другие функции
fwrite используют для бинарных файлов
используй fprintf
то же что и printf, но первым параметром еще указаывается файловый поток
C++
1
fprintf(f, "%x", i);
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.07.2010, 08:14
Привет! Вот еще темы с ответами:

отладить программу на языке С++, которая считывает из файла a.txt строку и записывает её в файл b.txt в обратном порядке - C++
я это взяла из книги полностью готовый код, а он не идёт.Помогите отладить, пожалуйста #include &lt;string.h&gt; #include &lt;stdlib.h&gt; ...

Прочитать txt и записать в другой txt файл - C++
Вот у меня например текстовый файл(Это 1 задание, осилил как-то), туда записан список студентов., мне нужно его прочитать (уже 2 задание)и...

В файле input.txt содержатся сведения о группе студентов. переписать данные файла в файл output.txt, отсортировав их по возрастанию - C++
Добрый вечер!!! Я - новичок по работе с С++, помогите, пожалуйста, написать программу на этом языке. В файле input.txt содержатся сведения...

Сформировать из файла f4.txt файл g.txt - C++
Сформировать из файла f4.txt файл g.txt, состоящий из целых чисел, но для нечётных чисел указать также их значение английским словом 1...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
28.07.2010, 08:14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru