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

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

Войти
Регистрация
Восстановить пароль
 
klsaymon
38 / 38 / 8
Регистрация: 28.05.2011
Сообщений: 257
Записей в блоге: 1
#1

GDI+ неправильно сохраняется изображение - C++

27.11.2011, 20:18. Просмотров 678. Ответов 2
Метки нет (Все метки)

Всем доброго времени суток!
Возникла проблема при сохранении BMP при помощи функций GDI+.
Делаю последовательно вызовы LockBits и UnlockBits, после чего сохраняю все в результирующий файл, размер которого оказывается почти в 4 раза больше исходного.
Вот кусок кода:
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
int main()
{
    // исходный файл
    wchar_t *pwsFileName =  L"1.bmp";
 
    GdiplusStartupInput gdiplusStartupInput;
    ULONG_PTR gdiplusToken;
    GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
 
    Bitmap *bitmap = new Bitmap(pwsFileName);
    BitmapData *bitmapData = new BitmapData();
 
    Rect rect(0, 0, bitmap->GetWidth(), bitmap->GetHeight());
 
    bitmap->LockBits(
        &rect,
        /*ImageLockModeRead | */ImageLockModeWrite,
        PixelFormat32bppARGB,
        bitmapData);
 
    bitmap->UnlockBits(bitmapData);
 
    CLSID bmpClsId;
    GetEncoderClsid(L"image/bmp", &bmpClsId);
 
    // результирующий файл
    Status st = bitmap->Save(L"res.bmp", &bmpClsId);
 
    delete bitmapData;
    delete bitmap;
    GdiplusShutdown(gdiplusToken);
 
    return 0;
}
Как я понял, все происходит из-за того, что в результирующем файле поле бит/пиксел (28-29 биты) равен 20, а в исходном 8. Тем самым, цвет получается более насыщенным.

Может кто-нибудь знает, как управлять данным полем(бит/пиксел)? жду вашей помощи...

Ниже в архиве находятся оба файла(исходный и результирующий), файл с кодом, а также файл со сравнением исходного и результирующего файлов.
Вложения
Тип файла: rar Forum.rar (52.8 Кб, 11 просмотров)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.11.2011, 20:18
Здравствуйте! Я подобрал для вас темы с ответами на вопрос GDI+ неправильно сохраняется изображение (C++):

Проверьте задачку по циклам, неправильно работает. [думаю что неправильно] - C++
Спасибо что решили зайти. Задание выгладит так: http://*******/PW95p А результат выплнения: http://*******/KwhuS #include...

GDI - C++
Ребята, привет. Не знаю, с чего начать. Нужен примерчик использования интерфейса графического устройства. Что-нибудь нарисовать,...

Анимация в GDI - C++
Подскажите, пожалуйста, как анимировать фигуру в GDI, чтобы она при нажатии на пробел, поднималась на пару пикселей Заранее спасибо

Литература по GDI+ - C++
Поискал какую-нибудь литературу (желательно русскоязычную), но ничего не нашел, кроме обзорных статей и отдельных примеров. А есть ли в...

Освоение gdi+ - C++
Первый вопрос. Есть созданная скажем из файла картинка в виде указателя на создланный Gdiplus::Image Как ее вывести не исходной, а...

Исходники GDI - C++
Может кто поделиться какими-нибудь исходниками связаными с использованием графики? А то не знаю как подступиться. В книжках есть куски...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
klsaymon
38 / 38 / 8
Регистрация: 28.05.2011
Сообщений: 257
Записей в блоге: 1
29.11.2011, 23:57  [ТС] #2
ну неужели никто не работал с GDI+???
klsaymon
38 / 38 / 8
Регистрация: 28.05.2011
Сообщений: 257
Записей в блоге: 1
03.12.2011, 00:42  [ТС] #3
Уважаемые модераторы, перенесите, пожалуйста, тему в раздел "С++ для экспертов". Буду очень благодарен...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.12.2011, 00:42
Привет! Вот еще темы с ответами:

GDI || DirectX - C++
Что лучше использовать в качестве меню для игр Win32 API + GUI или Win32 API + DirectX? Возможно ли в GUI\GUI+ сделать форму прозрачной?

GDI отрисовка и очистка - C++
Доброго времени суток! Суть такова: Вывожу посредством GDI прямые на консольное окно. После завершения отрисовки мне нужно стереть...

GDI, оттягивание прямоугольника - C++
Здравствуйте, вопрос такой. Выбрал я оси, нарисовал свой прямоугольник. Как мне реализовать штуку, чтобы мне можно было мой прямоугольник...

GDI+ или Direct2D? - C++
Всем привет! возможно звучит немного наивно, но хотелось бы узнать какую графическую технологию можно использовать, чтобы написать игру по...


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

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

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