Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
dikarr13

Создать растровое изображение любой размерности WINAPI

15.10.2014, 10:05. Показов 948. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Я создаю графический редактор, который должен редактировать растровые изображения любой размерности. Возникла проблема при сохранении файлов. В интернете нашел один способ, который позволяет быстро записать в файл изображение, но при этом ограничивается размерностью экрана. Подскажите пожалуйста, как можна обойти это ограничение.

Вот функция, которая записывает в файл изображение

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
54
55
56
57
58
59
60
61
62
63
void createBITMAP(RECT& client, HDC hdDC, TCHAR* FILENAME)
{
    BITMAPFILEHEADER bmfh;
    LPBITMAPINFO bmi;
    LPVOID Image;
    
    int width = client.right - client.left;
    int height = client.bottom - client.top;
    
    HDC hComDC = CreateCompatibleDC(hdDC);
    HBITMAP hbmp = CreateCompatibleBitmap(hdDC,width,height);
    SelectObject(hComDC,hbmp);
    BitBlt(hComDC,0,0,width,height,hdDC,0,0,SRCCOPY);
    BITMAP bmp;
    GetObject(hbmp,sizeof(BITMAP),&bmp);
 
    WORD ColorSize;
    switch (bmp.bmPlanes*bmp.bmBitsPixel)
    {
    case 1:
    case 4:
    case 8: 
    case 32:
    ColorSize = sizeof(RGBQUAD) * (1 <<( bmp.bmPlanes*bmp.bmBitsPixel)); 
    case 16:
    case 24:
    ColorSize = 0; 
    }
 
    //BITMAPINFOHEADER
    bmi = (LPBITMAPINFO) new BYTE[sizeof(BITMAPINFOHEADER)+ColorSize];
    bmi->bmiHeader.biHeight = bmp.bmHeight;
    bmi->bmiHeader.biWidth = bmp.bmWidth;
    bmi->bmiHeader.biPlanes = 1;
    bmi->bmiHeader.biBitCount = bmp.bmPlanes*bmp.bmBitsPixel;
    bmi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
    bmi->bmiHeader.biCompression = 0;
    bmi->bmiHeader.biClrImportant = 0;
    bmi->bmiHeader.biClrUsed = 1 <<( bmp.bmPlanes*bmp.bmBitsPixel);
    bmi->bmiHeader.biSizeImage = ((bmp.bmWidth*bmp.bmPlanes*bmp.bmBitsPixel+31) & ~31)/8*bmp.bmHeight;
    bmi->bmiHeader.biXPelsPerMeter = 0;
    bmi->bmiHeader.biYPelsPerMeter = 0;
    
    //BITMAPFILEHEADER
    bmfh.bfType = 0x4d42;
    bmfh.bfOffBits = sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+ColorSize;
    bmfh.bfSize = bmfh.bfOffBits+bmi->bmiHeader.biSizeImage;
    bmfh.bfReserved1 = 0;
    bmfh.bfReserved2 = 0;
 
    Image = (LPVOID) new  BYTE[bmi->bmiHeader.biSizeImage];
    GetDIBits(hDC,hbmp,0,height,Image,bmi,DIB_RGB_COLORS);
 
    DWORD temp;
    HANDLE file = CreateFile(FILENAME,GENERIC_READ | GENERIC_WRITE, 0, NULL,
                             CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
    WriteFile(file, &bmfh, sizeof(BITMAPFILEHEADER),&temp,NULL);
    WriteFile(file, bmi, sizeof(BITMAPINFOHEADER),&temp,NULL);
    WriteFile(file, Image, bmi->bmiHeader.biSizeImage, &temp,NULL);
    CloseHandle(file);
    delete [] Image;
    //delete bmih;
}
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.10.2014, 10:05
Ответы с готовыми решениями:

Создать растровое изображение
Создать растровое изображение размером 50*50, нарисовать в его центре прямоугольник размером 10*10 и отобразить данное изображение в левой...

[Adobe Illustrator] Преобразовать растровое изображение в векторное
Подскажите, как можно преобразовать растровое изображение в векторное, без потери качества? Изображение вроде не сложное, без высокой...

Редактировать растровое изображение в Photoshop
Как сделать что-б при выборе изображения в CorelDraw и нажатии кнопки 'Редактировать растровое изображение' изображение открывалось в...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.10.2014, 10:05
Помогаю со студенческими работами здесь

Растровое изображение, blob-поле и БД Access
Здравствуйте. Как загрузить файл изображения (png, jpg, gif) в БД (Access) и как загрузить это изображение обратно из БД? Например,...

Уменьшить растровое изображение без потери качества
Есть растровое изображение большого размера. Но при уменьшении его в значительно меньший размер и сохранении в формате PNG, ровные линии...

Создать текстовый файл с исходными данными любой размерности. Из текстового файла переписать числа в массив, типизированный файл. Сделать контрольный
Создать текстовый файл с исходными данными любой размерности. Из текстового файла переписать числа в массив, типизированный файл. Сделать...

Сколько секунд потребуется модему передающему сообщения со скоростью 28800 bit/s, чтобы передать цветное растровое изображение размером 640х480 пиксел
Помогите решить вот это: Сколько секунд потребуется модему передающему сообщения со скоростью 28800 bit/s, чтобы передать цветное...

Заполнение массивы любой размерности
Как заполнить массив любой размерности?


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
1С: Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru