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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ C++ НОД http://www.cyberforum.ru/cpp-beginners/thread393252.html
Создать функцию, вычисляющую НОД. Использую эту функцию, найти наибольший общий делитель элементов одномерного массива из 10-элементов. Если кто знает, как открыть программу, которая была создана...
C++ Товарищи помогите с вейвлетом Хаара #include <iostream> #include <time.h> using namespace std; int main () { int n; std::cout << "Enter n:\n>"; std::cin >> n; float* a = new float; ... http://www.cyberforum.ru/cpp-beginners/thread393251.html
По времени определить градус. Реализация в C. C++
Дано время — два целых числа количество часов и минут. Необходимо определить меньший угол между часовой и минутной стрелками на циферблате часов. При решении нельзя использовать условия, но можно...
Крестики нолики на Visual C++ C++
Пытаюсь написать игру крестики нолики на Visual C++ 6.0 В связи стем что на компьютерных курсах сжатый срок обучения то из - за небольшой практики и наверное недостаточной базы знаний эта простая...
C++ C++ виртуальные функции http://www.cyberforum.ru/cpp-beginners/thread393242.html
Помогите плиз, используя мою прогу, используя мой класс, объявить в нем функции виртуальными и дополнить программу классом, в котором будет использованы эти функции. Написать демонстрационную...
C++ do...while Дана последовательность:. Составить программу c использованием цикла while, выводящую на экран значение и номер члена последовательности, меньшего 0,1. Тест: n=4, p(n)=0,0625. Использовать цикл... подробнее

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

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

27.11.2011, 20:18. Просмотров 679. Ответов 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. Тем самым, цвет получается более насыщенным.

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

Ниже в архиве находятся оба файла(исходный и результирующий), файл с кодом, а также файл со сравнением исходного и результирующего файлов.
0
Вложения
Тип файла: rar Forum.rar (52.8 Кб, 11 просмотров)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru