Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 16.06.2014
Сообщений: 19
1

Вывод bitmap под углом

10.11.2014, 22:53. Показов 1298. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток. Помогите пожалуйста. Надо вывести bitmap под определённым углом. Как это сделать?)
(методами WinApi)

Заранее благодарен.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.11.2014, 22:53
Ответы с готовыми решениями:

Рисование эллипса под углом, WinApi
Всем привет, в WinApi для рисования эллипса используется функция Ellipse(), но она рисует только...

Получение фото с веб камеры, занесение его в Bitmap и преобразование Bitmap в массив
В общем необходимо подключиться к веб камере сделать снимок и отправить его в сеть. Задачу я...

Вывод label под заданным углом.
Необходимо вывести элемент label под заданным углом, если есть примеры, идеи, мысли о том как это...

Картинка под углом.
Не могу зделать картинку под углом нужно повернуть на несколько градусов, кто нибудь знает...

2
191 / 90 / 33
Регистрация: 04.11.2013
Сообщений: 474
Записей в блоге: 4
11.11.2014, 13:02 2
Лучший ответ Сообщение было отмечено Nicolas как решение

Решение

В winAPI вручную (считав каждый пиксель из bmp и расположив под углом), в DirectX вращением матрицы мира.

Считывание bmp
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
// Добавить альфа канал в BMP
// Описание формата BMP: [url]http://ru.wikipedia.org/wiki/BMP[/url]
 
 
#include <stdio.h>
#include <windows.h>
 
 struct pixel_rgba
 {
  public:
   BYTE b;
   BYTE g;
   BYTE r;
   BYTE a;
 };
 
 struct pixel_rgb
 {
  public:
   BYTE b;
   BYTE g;
   BYTE r;
 };
 
 
int main()
{
BITMAPFILEHEADER bmp_header;
BITMAPINFOHEADER info_header;
int i;
unsigned char y;
 
FILE *f;
FILE *g;
f = fopen("wood_100x100.bmp", "rb");
g = fopen("wood_100x100rgba.bmp", "wb");
fseek(f, 0 , SEEK_SET);
// SEEK_SET на начало файла
// SEEK_CUR текущая позиция
fread(&bmp_header, 1, sizeof(BITMAPFILEHEADER), f);
printf("sizeof(BITMAPFILEHEADER) : %x %d\n",
sizeof(BITMAPFILEHEADER), sizeof(BITMAPFILEHEADER));
fseek(g, 0 , SEEK_SET);
fwrite(&bmp_header, 1, sizeof(BITMAPFILEHEADER), g);
 
 
 
 
int dr = bmp_header.bfOffBits - sizeof(BITMAPFILEHEADER);
printf("dr: %d\n", dr);
 
if (dr == 40)
{
fseek(g, sizeof(BITMAPFILEHEADER), SEEK_SET);
fread(&info_header, 1, sizeof(BITMAPINFOHEADER), f);
 
  info_header.biSize = sizeof(BITMAPINFOHEADER);
  printf("info_header.biSize: %x\n", info_header.biSize);
  printf("info_header.biWidth: %d\n", info_header.biWidth);
  printf("info_header.biHeight: %d\n", info_header.biHeight);
  printf("info_header.biPlanes: %d\n", info_header.biPlanes);
  printf("info_header.biBitCount: %d\n", info_header.biBitCount);
  printf("info_header.biCompression: %d\n", info_header.biCompression);
  printf("info_header.biSizeImage: %d\n", info_header.biSizeImage);
  printf("info_header.biXPelsPerMeter: %d\n", info_header.biXPelsPerMeter);
  printf("info_header.biYPelsPerMeter: %d\n", info_header.biYPelsPerMeter);
  printf("info_header.biClrUsed: %d\n", info_header.biClrUsed);
  printf("info_header.biClrImportant: %d\n", info_header.biClrImportant);
 
info_header.biBitCount = 32;
 
fseek(g, sizeof(BITMAPFILEHEADER) , SEEK_SET);
fwrite(&info_header, 1, sizeof(BITMAPINFOHEADER), g);
 
}
 
printf("bmp_header.bfType: %x\n", bmp_header.bfType);
printf("bmp_header.bfSize: %x\n", bmp_header.bfSize);
printf("bmp_header.bfReserved1: %x\n", bmp_header.bfReserved1);
printf("bmp_header.bfReserved2: %x\n", bmp_header.bfReserved2);
printf("bmp_header.bfOffBits: %x\n", bmp_header.bfOffBits);
 
printf("sizeof(BITMAPFILEHEADER) : %x %d\n", sizeof(BITMAPFILEHEADER), sizeof(BITMAPFILEHEADER));
printf("sizeof(BITMAPV4HEADER) : %x %d\n", sizeof(BITMAPV4HEADER), sizeof(BITMAPV4HEADER));
printf("sizeof(BITMAPV5HEADER) : %x %d\n", sizeof(BITMAPV5HEADER), sizeof(BITMAPV5HEADER));
 
 
// перебор пикселей изображения
int offset;
int offset2;
int j = 0;
int h = sizeof(pixel_rgb);
printf("sizeof(pixel_rgb) : %x %d\n", sizeof(pixel_rgb), sizeof(pixel_rgb));
pixel_rgb rt;
pixel_rgba rt2;
// условие остановки
while(bmp_header.bfOffBits +  j * sizeof(pixel_rgb) < bmp_header.bfSize)
{
offset =  bmp_header.bfOffBits +  j * sizeof(pixel_rgb);
offset2 =  bmp_header.bfOffBits +  j * sizeof(pixel_rgba);
fseek(f, offset , SEEK_SET);
fread(&rt, 1, sizeof(pixel_rgb), f);
rt2.b = rt.b;
rt2.g = rt.g;
rt2.r = rt.r;
if (rt.b == 255 && rt.g == 255 && rt.r == 255)
 rt2.a = 255;
else
 rt2.a = 0;
 
printf("%x %x %x ",  rt.b,  rt.g,  rt.r);
 
fseek(g, offset2 , SEEK_SET);
fwrite(&rt2, 1, sizeof(pixel_rgba), g);
 
j++;
}
 
fclose(f);
fclose(g);
 
return 0;
}
1
0 / 0 / 0
Регистрация: 16.06.2014
Сообщений: 19
11.11.2014, 17:03  [ТС] 3
Спасибо
0
11.11.2014, 17:03
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.11.2014, 17:03
Помогаю со студенческими работами здесь

Анимация под углом
Здравствуйте, помогите пожалуйста с анимацией - нужно данную анимацию повернуть на угол (допустим...

Фон под углом
Скажите как лучше делать такие косые фоны?

Текст под углом
Здравствуйте. Помогите пожалуйста ниписать текст по вертикали. t.Format(&quot;%g&quot;,L); ...

Текст под углом
Здесь рассказано, как вывести текст на канву под заданным углом... Почему у меня ничего не...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru