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

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

Ужасс


 ш
(';')
(V),(V),,
Код: plaintext
 JS 
...
Рейтинг: 0 / 0
21.10.2004, 13:41
    #32748390
alex_k
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Картинки
если качество играет вторую роль, можно попробовать через OpenGL
учитывая что сейчас у всех стоят всякие жифорсы, то проблем с fps не будет
...
Рейтинг: 0 / 0
21.10.2004, 15:47
    #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
21.10.2004, 16:09
    #32748790
Siebentearbeit
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Картинки
авторSetWorldTransform
Ага, я ждал такой вариант :)

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

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

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


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

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

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

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

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


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


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