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

Заменить определенный байты изображения - C++

Восстановить пароль Регистрация
 
Демик
9 / 9 / 0
Регистрация: 19.04.2012
Сообщений: 114
22.10.2013, 16:43     Заменить определенный байты изображения #1
Здравствуйте, я хочу заменить определенный байты изображения, вроде бы по коду у меня все нормально, но похоже я что-то напутал с флагами при открытии и вместо изменения у меня происходит заполнение файла нулями с самого начала, причем именно нулями, хотя должны быть измененные байты. Подскажите пожалуйста, что у меня не так?
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
46
47
48
49
50
51
52
53
void  CreateImage(string pathImage, string pathMessage)
{
    char image_b = NULL;
    char image_g = NULL;
    char message_b = NULL;
    int messageSize = GetFileSize(pathMessage);
    const int size = 1;
    ifstream image_r;
    ifstream message (pathMessage, ios::binary | ios::in);
    ofstream image_w; 
    int j = 0;
 
 
    for(int i = 0; i < (messageSize*3)+1; i+=3)
    {
        if (i == messageSize*3)
        {
            image_b = (image_b & 0xf0) | 0x00;
            image_g = (image_g & 0xf0)| 0x0f;
            image_w.open(pathImage, ios::binary | ios::out);
            image_w.seekp((55+i)*sizeof(char), std::ios::beg);
            image_w<<image_b;
            image_w.seekp((55+i+1)*sizeof(char), std::ios::beg);
            image_w<<image_g;
            image_w.close();
        } 
        else
        {
            message.seekg(j);
            message.get(message_b);
            image_r.open(pathImage, ios::binary | ios::in);
            image_r.seekg((55+i)*sizeof(char), std::ios::beg);
            image_r.get(image_b);
            image_r.seekg((55+i+1)*sizeof(char), std::ios::beg);
            image_r.get(image_g);
            image_r.close();
 
            image_b = (image_b & 0xf0)|((message_b & 0xf0) >> 4);
            image_g = (image_g & 0xf0)|(message_b & 0x0f);
 
            image_w.open(pathImage, ios::binary | ios::out);
            image_w.seekp((55+i)*sizeof(char), std::ios::beg);
            image_w<<image_b;
            image_w.seekp((55+i+1)*sizeof(char), std::ios::beg);
            image_w<<image_g;
            image_w.close();
            j++;
        }
        
    }
 
    message.close();
}
Добавлено через 2 часа 14 минут
Блин, ну а все таки, почему он перезаписывает файл, вместо того, что бы изменять указанные байты??
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.10.2013, 16:43     Заменить определенный байты изображения
Посмотрите здесь:

байты в строку C++
C++ Первые байты
Как заменить определенный символ на номера попорядку? C++
Различные байты C++
C++ Упаковка в байты
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
vua72
410 / 410 / 83
Регистрация: 28.11.2010
Сообщений: 1,158
22.10.2013, 17:10     Заменить определенный байты изображения #2
C++
1
ofstream image_w;
открытие на перезапись
C++
1
2
ofstream myfile;
myfile.open ("example.bin", ios::out | ios::app | ios::binary);
открытие на дозапись
Демик
9 / 9 / 0
Регистрация: 19.04.2012
Сообщений: 114
22.10.2013, 17:38  [ТС]     Заменить определенный байты изображения #3
до запись происходит в конец файла?А если мне нужно в определенную позицию записать байт?

Добавлено через 23 минуты
Да, до запись происходит в конец файла, блин, как мне перезаписывать определенный байты?
vua72
410 / 410 / 83
Регистрация: 28.11.2010
Сообщений: 1,158
22.10.2013, 19:39     Заменить определенный байты изображения #4
Цитата Сообщение от Демик Посмотреть сообщение
до запись происходит в конец файла?А если мне нужно в определенную позицию записать байт?

Добавлено через 23 минуты
Да, до запись происходит в конец файла, блин, как мне перезаписывать определенный байты?
почитайте книгу, например Прата.

Для вашей задачи
C++
1
2
3
fstream finout;     // read and write streams
    finout.open(file, 
           ios_base::in | ios_base::out | ios_base::binary);
Демик
9 / 9 / 0
Регистрация: 19.04.2012
Сообщений: 114
22.10.2013, 20:37  [ТС]     Заменить определенный байты изображения #5
Спасибо, прочитаю, а запись происходит так же?
Yandex
Объявления
22.10.2013, 20:37     Заменить определенный байты изображения
Ответ Создать тему
Опции темы

Текущее время: 05:23. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru