powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Картинки
15 сообщений из 15, страница 1 из 1
Картинки
    #32748139
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос:
Можно ли в Win32API картинку поворачивать на угол?
Любую. Даже через IPicture.

А так же, как организовать в, к примеру, битмапах прозрачность в реалтайме?
(Типа есть у меня битмап 1000х1000 с половиной нерисуемых точек... и мне его надо несколько раз в секунду рисовать...)
...
Рейтинг: 0 / 0
Картинки
    #32748356
Фотография JibSkeart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор
(Типа есть у меня битмап 1000х1000 с половиной нерисуемых точек... и мне его надо несколько раз в секунду рисовать...)

Ужасс


 ш
(';')
(V),(V),,
Код: plaintext
 JS 
...
Рейтинг: 0 / 0
Картинки
    #32748390
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если качество играет вторую роль, можно попробовать через OpenGL
учитывая что сейчас у всех стоят всякие жифорсы, то проблем с fps не будет
...
Рейтинг: 0 / 0
Картинки
    #32748720
Tracer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SetWorldTransform
ModifyWorldTransform

а вот и примерчик из мсдн

Код: plaintext
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.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
void TransformAndDraw(int iTransform, HWND hWnd) 
{ 
    HDC hDC; 
    XFORM xForm; 
    RECT rect; 
 
     // Retrieve a DC handle for the application's window. 
 
    hDC = GetDC(hWnd); 
 
    // Set the mapping mode to LOENGLISH. This moves the 
    // client area origin from the upper left corner of the 
    // window to the lower left corner (this also reorients 
    // the y-axis so that drawing operations occur in a true 
    // Cartesian space). It guarantees portability so that 
    // the object drawn retains its dimensions on any display. 

    SetGraphicsMode(hDC, GM_ADVANCED);
    SetMapMode(hDC, MM_LOENGLISH); 
 
    // Set the appropriate world transformation (based on the 
    // user's menu selection).  
 
    switch (iTransform) 
    { 
        case SCALE:         // Scale to 1/2 of the original size.  
            xForm.eM11 = (FLOAT)  0 . 5 ; 
            xForm.eM12 = (FLOAT)  0 . 0 ; 
            xForm.eM21 = (FLOAT)  0 . 0 ; 
            xForm.eM22 = (FLOAT)  0 . 5 ; 
            xForm.eDx  = (FLOAT)  0 . 0 ; 
            xForm.eDy  = (FLOAT)  0 . 0 ; 
            SetWorldTransform(hDC, &xForm); 
            break; 
 
        case TRANSLATE:    // Translate right by 3/4 inch.  
            xForm.eM11 = (FLOAT)  1 . 0 ; 
            xForm.eM12 = (FLOAT)  0 . 0 ; 
            xForm.eM21 = (FLOAT)  0 . 0 ; 
            xForm.eM22 = (FLOAT)  1 . 0 ; 
            xForm.eDx  = (FLOAT)  75 . 0 ; 
            xForm.eDy  = (FLOAT)  0 . 0 ; 
            SetWorldTransform(hDC, &xForm); 
            break; 
 
        case ROTATE:       // Rotate 30 degrees counterclockwise.  
            xForm.eM11 = (FLOAT)  0 . 8660 ; 
            xForm.eM12 = (FLOAT)  0 . 5000 ; 
            xForm.eM21 = (FLOAT) - 0 . 5000 ; 
            xForm.eM22 = (FLOAT)  0 . 8660 ; 
            xForm.eDx  = (FLOAT)  0 . 0 ; 
            xForm.eDy  = (FLOAT)  0 . 0 ; 
            SetWorldTransform(hDC, &xForm); 
            break; 
 
        case SHEAR:        // Shear along the x-axis with a  
                           // proportionality constant of 1.0.  
            xForm.eM11 = (FLOAT)  1 . 0 ; 
            xForm.eM12 = (FLOAT)  1 . 0 ; 
            xForm.eM21 = (FLOAT)  0 . 0 ; 
            xForm.eM22 = (FLOAT)  1 . 0 ; 
            xForm.eDx  = (FLOAT)  0 . 0 ; 
            xForm.eDy  = (FLOAT)  0 . 0 ; 
            SetWorldTransform(hDC, &xForm); 
            break; 
 
        case REFLECT:      // Reflect about a horizontal axis.  
            xForm.eM11 = (FLOAT)  1 . 0 ; 
            xForm.eM12 = (FLOAT)  0 . 0 ; 
            xForm.eM21 = (FLOAT)  0 . 0 ; 
            xForm.eM22 = (FLOAT) - 1 . 0 ; 
            xForm.eDx  = (FLOAT)  0 . 0 ; 
            xForm.eDy  = (FLOAT)  0 . 0 ; 
            SetWorldTransform(hDC, &xForm); 
            break; 
 
        case NORMAL:       // Set the unity transformation.  
            xForm.eM11 = (FLOAT)  1 . 0 ; 
            xForm.eM12 = (FLOAT)  0 . 0 ; 
            xForm.eM21 = (FLOAT)  0 . 0 ; 
            xForm.eM22 = (FLOAT)  1 . 0 ; 
            xForm.eDx  = (FLOAT)  0 . 0 ; 
            xForm.eDy  = (FLOAT)  0 . 0 ; 
            SetWorldTransform(hDC, &xForm); 
            break; 
 
    } 
 
     // Find the midpoint of the client area.  
 
    GetClientRect(hWnd, (LPRECT) &rect); 
    DPtoLP(hDC, (LPPOINT) &rect,  2 ); 
 
     // Select a hollow brush.  
 
    SelectObject(hDC, GetStockObject(HOLLOW_BRUSH)); 
 
     // Draw the exterior circle.  
 
    Ellipse(hDC, (rect.right /  2  -  100 ), (rect.bottom /  2  +  100 ), 
        (rect.right /  2  +  100 ), (rect.bottom /  2  -  100 )); 
 
     // Draw the interior circle.  
 
    Ellipse(hDC, (rect.right /  2  - 94 ), (rect.bottom /  2  +  94 ), 
        (rect.right /  2  +  94 ), (rect.bottom /  2  -  94 )); 
 
     // Draw the key.  
 
    Rectangle(hDC, (rect.right /  2  -  13 ), (rect.bottom /  2  +  113 ), 
        (rect.right /  2  +  13 ), (rect.bottom /  2  +  50 )); 
    Rectangle(hDC, (rect.right /  2  -  13 ), (rect.bottom /  2  +  96 ), 
        (rect.right /  2  +  13 ), (rect.bottom /  2  +  50 )); 
 
     // Draw the horizontal lines.  
 
    MoveToEx(hDC, (rect.right/ 2  -  150 ), (rect.bottom /  2  +  0 ), NULL); 
    LineTo(hDC, (rect.right /  2  -  16 ), (rect.bottom /  2  +  0 )); 
 
    MoveToEx(hDC, (rect.right /  2  -  13 ), (rect.bottom /  2  +  0 ), NULL); 
    LineTo(hDC, (rect.right /  2  +  13 ), (rect.bottom /  2  +  0 )); 
 
    MoveToEx(hDC, (rect.right /  2  +  16 ), (rect.bottom /  2  +  0 ), NULL); 
    LineTo(hDC, (rect.right /  2  +  150 ), (rect.bottom /  2  +  0 )); 
 
     // Draw the vertical lines.  
 
    MoveToEx(hDC, (rect.right/ 2  +  0 ), (rect.bottom /  2  -  150 ), NULL); 
    LineTo(hDC, (rect.right /  2  +  0 ), (rect.bottom /  2  -  16 )); 
 
    MoveToEx(hDC, (rect.right /  2  +  0 ), (rect.bottom /  2  -  13 ), NULL); 
    LineTo(hDC, (rect.right /  2  +  0 ), (rect.bottom /  2  +  13 )); 
 
    MoveToEx(hDC, (rect.right /  2  +  0 ), (rect.bottom /  2  +  16 ), NULL); 
    LineTo(hDC, (rect.right /  2  +  0 ), (rect.bottom /  2  +  150 )); 
 
    ReleaseDC(hWnd, hDC); 
} 
...
Рейтинг: 0 / 0
Картинки
    #32748790
Siebentearbeit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторSetWorldTransform
Ага, я ждал такой вариант :)

А он 9х/МЕ не поддерживается :(
...
Рейтинг: 0 / 0
Картинки
    #32748800
Sie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sie
Гость
и в догонку, сразу вопрос
если я потащу с собой gdi32.dll из NT в 9х,
как сильно я обломлюсь с этими функциями?
...
Рейтинг: 0 / 0
Картинки
    #32748897
Tracer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторесли я потащу с собой gdi32.dll из NT в 9х
Вряд ли кто этим делом занимался. Скорее всего обломишься.

авторАга, я ждал такой вариант :)

А он 9х/МЕ не поддерживается :(
Шош ты сразу не сказал, тогда смотри в сторону
IDirectDrawSurface7::Blt , там всё есть, и поворот, и альфа
...
Рейтинг: 0 / 0
Картинки
    #32748913
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sieи в догонку, сразу вопрос
если я потащу с собой gdi32.dll из NT в 9х,
как сильно я обломлюсь с этими функциями?
уверен, что она полезет за особыми функциями в usert32.dll, kernel32.dll и т.п.
хотя вроде бы gdi+ можно просто таскать с своим приложением.
Но не уверен.
...
Рейтинг: 0 / 0
Картинки
    #32749490
Sie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sie
Гость
авторШош ты сразу не сказал
да подумал, если отписаться от всех "неработающих" вариантов, то никто и не ответит ничего :)


автортогда смотри в сторону IDirectDrawSurface7::Blt
Хм.. DD никогда не пользовался... надо будет посмотреть...

авторуверен, что она полезет за особыми функциями в usert32.dll, kernel32.dll и т.п.
Тоже уверен, но, если взять dll-ину user32.dll из НТ и потом внутри поменять все ссылки с местной на родные библиотеки... По идее, имя дллин должно лежать открытым текстом...
К примеру, беру я user32, переименовываю в user33, все внутренние вызовы будут работать как и раньше.
Если она куда наружу полезет, то или выругается, что вход в функцию не найден, или упадёт.
В первом случае, надо для сделать те же шаги (32 на 33) для библиотеки, содержащей нужную функцию и внутри user33 поменять имя библиотеки
Во втором случае всё сложнее, но принцип тот же...

авторхотя вроде бы gdi+ можно просто таскать с своим приложением.
Тоже не пользовался, тока читал немного... надо посмотреть, что это...
...
Рейтинг: 0 / 0
Картинки
    #32749574
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sie
автортогда смотри в сторону IDirectDrawSurface7::Blt
Хм.. DD никогда не пользовался... надо будет посмотреть...

тогда лучше OpenGL...
как-то ближе русской душе, имхо :-)
...
Рейтинг: 0 / 0
Картинки
    #32749714
Sie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sie
Гость
... или уж свою библиотечку накатать?..
...
Рейтинг: 0 / 0
Картинки
    #32749726
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sie... или уж свою библиотечку накатать?..
можно и свою.
но имхо, лучше не надо :-)
...
Рейтинг: 0 / 0
Картинки
    #32749870
Фотография JibSkeart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а просто самому сделать подобную вещь ?!

гдето видывал функции реализованные для этого .


 ш
(';')
(V),(V),,
Код: plaintext
 JS 
...
Рейтинг: 0 / 0
Картинки
    #32750011
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в том то и дело, что такие штуки реализованы многократно в разных вариациях.
Если не стоит задача "научиться", то лучше выбрать наиболее стандартный из приемлимых и наиболее приемлимый из стандартных способов.
...
Рейтинг: 0 / 0
Картинки
    #32752028
Sie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sie
Гость
Ок, всем спасиба, подумаю...
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Картинки
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]