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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 24, средняя оценка - 4.71
florgas
5 / 4 / 0
Регистрация: 28.09.2010
Сообщений: 355
#1

Невозможно преобразовать параметр 1 из "const wchar_t [12]" в "const char *" - C++

25.12.2012, 19:55. Просмотров 3512. Ответов 33
Метки нет (Все метки)

Писал программу. Дошел до наложения текстур. Пытаюсь наложить 4-й час. Много разных ошибок. Все ошибки гуглил. На данный момент ошибка такая:
невозможно преобразовать параметр 1 из "const wchar_t [12]" в "const char *"
Гуглил эту ошибку, писали, что надо добавить "L", чтобы привести к нужному типу данных, но проблема в том, что эта ошибка выдается, когда "L" у меня уже есть, а если "L" нету, то выдаются совсем другой длинный список ошибок.

Код программы:
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
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
#include <time.h>
#include <Windows.h>
#include <stdlib.h>
#include <GL/glut.h>
#include <GL/glu.h>
#include <GL/glaux.h>
#include <cstdio>
#pragma comment (lib, "glaux.lib")
#pragma comment (lib,"glu32.lib")
#pragma comment (lib,"opengl32.lib")
int dir;
float gamer_x=0, gamer_y=0, gamer_z=0, mob_x=0, mob_y=0, mob_z=0;
GLuint gamingtxt, texture;
 
GLuint LoadBMP(const char *fmt, ...)
{
    GLuint t;
    char filename[256];
    va_list ap;
    va_start(ap, fmt);
    vsprintf_s(filename, fmt, ap);
    va_end(ap);
 
    AUX_RGBImageRec *texture = auxDIBImageLoadA(filename);
    glGenTextures(1, &t);
    glBindTexture(GL_TEXTURE_2D, t);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
    glTexImage2D(GL_TEXTURE_2D, 0, 3, texture->sizeX, texture->sizeY, 0,
    GL_RGB, GL_UNSIGNED_BYTE, texture->data);
    
    return t;    
}
 
void display(void) { 
glClear (GL_COLOR_BUFFER_BIT);
 
/* Игрок */ 
glColor3f (1.0, 1.0, 1.0); 
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, gamingtxt);
glBegin(GL_POLYGON); 
glTexCoord2d(0, 0); glVertex3f (gamer_x, gamer_y, gamer_z + 0.0); 
glTexCoord2d(1, 0); glVertex3f (gamer_x + 0.03, gamer_y, gamer_z + 0.0); 
glTexCoord2d(1, 1); glVertex3f (gamer_x + 0.03, gamer_y + 0.03, gamer_z + 0.0); 
glTexCoord2d(0, 1); glVertex3f (gamer_x, gamer_y + 0.03, gamer_z + 0.0);
glEnd();
 
/* Противники */
 
glColor3f (0.0, 0.0, 0.0); 
glBegin(GL_POLYGON); 
glVertex3f (mob_x + 0.22, mob_y + 0.22, mob_z + 0.0); 
glVertex3f (mob_x + 0.25, mob_y + 0.22, mob_z + 0.0); 
glVertex3f (mob_x + 0.25, mob_y + 0.25, mob_z + 0.0); 
glVertex3f (mob_x + 0.22, mob_y + 0.25, mob_z + 0.0);
glEnd();
glutSwapBuffers();
} 
 
/* Движение мобов */
void MobMotion(){
    int RandomNumber = rand()%4;
    switch(RandomNumber)
    {
        case 0 :  mob_x-=0.01; break;
        case 1 :  mob_y+=0.01; break;
        case 2 :  mob_x+=0.01; break;        
        case 3 :  mob_y-=0.01; break;
    }
}
 
/* Ограничение перемещения размерами экрана */
void Screen(){
    if(gamer_x>0.97){
            gamer_x = 0.97;
            }
    if(gamer_x<-1){
            gamer_x = -1;
            }
    if(gamer_y>0.97){
            gamer_y = 0.97;
            }
    if(gamer_y<-1){
            gamer_y = -1;
            }
    if(mob_x>0.97){
            mob_x = 0.97;
            }
    if(mob_x<-1){
            mob_x = -1;
            }
    if(mob_y>0.97){
            mob_y = 0.97;
            }
    if(mob_y<-1){
            mob_y = -1;
            }
            
}
 
/* Функция времени */
void Timer(int){
    display();  
    MobMotion();
    Screen();
    glutTimerFunc(0.001, Timer, 0);
}
 
/* Функция считывания нажатия клавиш и перемещения игрока */
void KeyboardEvent(int key, int a, int b)
{   
    switch(key)
    {
        case 100 :  gamer_x-=0.01; break;
        case 101 :  gamer_y+=0.01; break;
        case 102:   gamer_x+=0.01; break;        
        case 103 :  gamer_y-=0.01; break;
    }
}
 
/* Определим параметры окна */ 
int main(int argc, char** argv) 
{ 
glutInit(&argc, argv); 
glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB); 
glutInitWindowSize (800, 800); 
glutInitWindowPosition (100, 100); 
glutCreateWindow ("Game v0.1"); 
glClearColor (0.0,0.4,0.0,0.0); 
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
gamingtxt = LoadBMP(L"texture.bmp");
glutDisplayFunc(display); 
glutTimerFunc(0.001, Timer, 0);
glutSpecialFunc(KeyboardEvent);
glutMainLoop(); 
return 0;
}
Прошу помощи.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.12.2012, 19:55
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Невозможно преобразовать параметр 1 из "const wchar_t [12]" в "const char *" (C++):

Ошибка 6 error C2664: strtok: невозможно преобразовать параметр 1 из "const char *" в "char *" - C++
string s = &quot;555 44 55 66&quot;;//размер строки заранее неизвестен char* p = strtok(s.c_str(), ' '); не нравится такое...

error C2664: strcmp: невозможно преобразовать параметр 1 из "char (*)[20]" в "const char *" - C++
for(int i = 0; i&lt; 5; i++) { wr_struc (list); if (strcmp(&amp;list.Sostav,osn_sostav)==0 &amp;&amp; strcmp(&amp;list.MestoVkomande,attack)==0...

невозможно преобразовать параметр 1 из "const char [8]" в "LPCWSTR" - C++
msoftcon.h //msoftcon.h //declarations for Lafore's console graphics functions //uses Window's console functions #ifndef...

Error C2440: return: невозможно преобразовать "const char *" в "const char (&)[6]" - C++
Вроде все правильно а все равно не работает. Подскажите в чем ошибка #include &lt;iostream&gt; template&lt;typename T&gt; inline const T...

Невозможно преобразовать параметр 2 из "char" в "const char *" - C++
Ошибка strcpy: невозможно преобразовать параметр 2 из &quot;char&quot; в &quot;const char *&quot; //удаления из первой строки всех символов, встречающихся...

Error C2664: невозможно преобразовать из "wchar_t" в "const wchar_t *" - C++
Вот так работает: wchar_t buf; Edit_GetText(hE, buf, sizeof(buf)); if(buf) { wchar_t b; _itow_s(wcscspn(buf, &amp;buf), b, 10); ...

33
programina
1916 / 601 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
26.12.2012, 19:17 #16

Не по теме:

florgas, ну, вот видишь, твою тему заметили

Цитата Сообщение от magirus Посмотреть сообщение
programina, не стоит давать советов, нарушающих правила форума.
"Aye aye, commander"



Добавлено через 6 минут
По-моему там нужно убрать букву L и перевести все в Unicode, а вообще втопку эту вижуал студию
0
florgas
5 / 4 / 0
Регистрация: 28.09.2010
Сообщений: 355
26.12.2012, 20:53  [ТС] #17
Если убрать "L" появляется куда других ошибок.
0
programina
1916 / 601 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
26.12.2012, 20:57 #18
Цитата Сообщение от florgas Посмотреть сообщение
Если убрать "L" появляется куда других ошибок
Какие, можешь выложить?
0
Avazart
Эксперт С++
7432 / 5471 / 310
Регистрация: 10.12.2010
Сообщений: 24,384
Записей в блоге: 17
26.12.2012, 21:01 #19
Цитата Сообщение от florgas Посмотреть сообщение
невозможно преобразовать параметр 1 из "const wchar_t [12]" в "const char *"
В какой строке ошибка то ?

Добавлено через 1 минуту
Полагаю в этой
C++
1
gamingtxt = LoadBMP(L"texture.bmp");
Убери L

Добавлено через 42 секунды
C++
1
GLuint LoadBMP(const char *fmt, ...)
0
programina
1916 / 601 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
26.12.2012, 21:01 #20
Avazart, очевидно, что 132
0
florgas
5 / 4 / 0
Регистрация: 28.09.2010
Сообщений: 355
26.12.2012, 21:32  [ТС] #21
Список появляющихся ошибок:
1>glaux.lib(tkimage.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__wsprintfA в функции _RawImageOpenAW@8
1>glaux.lib(tkdib.obj) : error LNK2001: неразрешенный внешний символ "__imp__wsprintfA"
1>glaux.lib(tkimage.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__MessageBoxA@16 в функции _RawImageOpenAW@8
1>glaux.lib(tkdib.obj) : error LNK2001: неразрешенный внешний символ "__imp__MessageBoxA@16"
1>glaux.lib(tk.obj) : error LNK2001: неразрешенный внешний символ "__imp__MessageBoxA@16"
1>glaux.lib(tkimage.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__GetFocus@0 в функции _RawImageOpenAW@8
1>glaux.lib(tkdib.obj) : error LNK2001: неразрешенный внешний символ "__imp__GetFocus@0"
1>glaux.lib(tk.obj) : error LNK2001: неразрешенный внешний символ "__imp__GetFocus@0"
1>glaux.lib(tkdib.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__DeleteObject@4 в функции _tkDIBImageLoadAW@8
1>glaux.lib(tk.obj) : error LNK2001: неразрешенный внешний символ "__imp__DeleteObject@4"
1>glaux.lib(tkdib.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__DeleteDC@4 в функции _tkDIBImageLoadAW@8
1>glaux.lib(tkdib.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__GdiFlush@0 в функции _tkDIBImageLoadAW@8
1>glaux.lib(tkdib.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__SetDIBits@28 в функции _tkDIBImageLoadAW@8
1>glaux.lib(tkdib.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__SelectObject@8 в функции _tkDIBImageLoadAW@8
1>glaux.lib(tkdib.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__CreateDIBSection@24 в функции _tkDIBImageLoadAW@8
1>glaux.lib(tkdib.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__CreateCompatibleDC@4 в функции _tkDIBImageLoadAW@8
1>glaux.lib(tk.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__DispatchMessageA@4 в функции _tkExec@0
1>glaux.lib(tk.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__GetMessageA@16 в функции _tkExec@0
1>glaux.lib(tk.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__TranslateMessage@4 в функции _tkExec@0
1>glaux.lib(tk.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__PeekMessageA@20 в функции _tkExec@0
1>glaux.lib(tk.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__GetClientRect@8 в функции _tkExec@0
1>glaux.lib(tk.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__GetSystemMetrics@4 в функции _tkInitPosition@16
1>glaux.lib(tk.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__ShowWindow@8 в функции _tkInitWindowAW@8
1>glaux.lib(tk.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__GetDC@4 в функции _tkInitWindowAW@8
1>glaux.lib(tk.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__GetWindowRect@8 в функции _tkInitWindowAW@8
1>glaux.lib(tk.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__CreateWindowExA@48 в функции _tkInitWindowAW@8
1>glaux.lib(tk.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__CreateWindowExW@48 в функции _tkInitWindowAW@8
1>glaux.lib(tk.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__AdjustWindowRect@12 в функции _tkInitWindowAW@8
1>glaux.lib(tk.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__RegisterClassA@4 в функции _tkInitWindowAW@8
1>glaux.lib(tk.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__RegisterClassW@4 в функции _tkInitWindowAW@8
1>glaux.lib(tk.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__GetStockObject@4 в функции _tkInitWindowAW@8
1>glaux.lib(tk.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__LoadCursorA@8 в функции _tkInitWindowAW@8
1>glaux.lib(tk.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__LoadIconA@8 в функции _tkInitWindowAW@8
1>glaux.lib(tk.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__SetPaletteEntries@16 в функции _tkSetOneColor@16
1>glaux.lib(tk.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__GetPaletteEntries@16 в функции _tkSetFogRamp@8
1>glaux.lib(tk.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__SwapBuffers@4 в функции _tkSwapBuffers@0
1>glaux.lib(tk.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__GetCursorPos@4 в функции _tkGetMouseLoc@8
1>glaux.lib(tk.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__SetCapture@4 в функции _tkWndProc@16
1>glaux.lib(tk.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__ReleaseCapture@0 в функции _tkWndProc@16
1>glaux.lib(tk.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__GetKeyState@4 в функции _tkWndProc@16
1>glaux.lib(tk.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__DestroyWindow@4 в функции _tkWndProc@16
1>glaux.lib(tk.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__EndPaint@8 в функции _tkWndProc@16
1>glaux.lib(tk.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__BeginPaint@8 в функции _tkWndProc@16
1>glaux.lib(tk.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__PostQuitMessage@4 в функции _tkWndProc@16
1>glaux.lib(tk.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__RealizePalette@4 в функции _tkWndProc@16
1>glaux.lib(tk.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__SelectPalette@12 в функции _tkWndProc@16
1>glaux.lib(tk.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__DefWindowProcA@16 в функции _tkWndProc@16
1>glaux.lib(tk.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__RegCloseKey@4 в функции _GetRegistrySysColors@8
1>glaux.lib(tk.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__RegQueryValueExA@24 в функции _GetRegistrySysColors@8
1>glaux.lib(tk.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__RegOpenKeyExA@20 в функции _GetRegistrySysColors@8
1>glaux.lib(tk.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__PostMessageA@16 в функции _GrabStaticEntries@4
1>glaux.lib(tk.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__SetSysColors@12 в функции _GrabStaticEntries@4
1>glaux.lib(tk.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__GetSysColor@4 в функции _GrabStaticEntries@4
1>glaux.lib(tk.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__SetSystemPaletteUse@8 в функции _GrabStaticEntries@4
1>glaux.lib(tk.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__CreatePalette@4 в функции _FlushPalette@8
1>glaux.lib(tk.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__SetPixelFormat@12 в функции _FindPixelFormat@8
1>glaux.lib(tk.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__ChoosePixelFormat@8 в функции _FindBestPixelFormat@12
1>glaux.lib(tk.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__DescribePixelFormat@16 в функции _FindExactPixelFormat@12
1>glaux.lib(tk.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__UnrealizeObject@4 в функции _RealizePaletteNow@12
1>glaux.lib(tk.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__InvalidateRect@12 в функции _ForceRedraw@4
1>glaux.lib(tk.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__GetPixelFormat@4 в функции _PixelFormatDescriptorFromDc@8
1>glaux.lib(tk.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__ReleaseDC@8 в функции _CleanUp@0
1>c:\my dоcuments\visual studio 2010\Projects\fff\Debug\fff.exe : fatal error LNK1120: 56 неразрешенных внешних элементов
1>
1>Build FAILED.
0
Avazart
Эксперт С++
7432 / 5471 / 310
Регистрация: 10.12.2010
Сообщений: 24,384
Записей в блоге: 17
26.12.2012, 21:35 #22
Либу OpenGL откуда брали ?
Она вообще рабочая? проверьте на простом примере ?
0
florgas
5 / 4 / 0
Регистрация: 28.09.2010
Сообщений: 355
26.12.2012, 22:18  [ТС] #23
О какой библиотеке идет речь?
glaux.lib, glu32.lib, opengl32.lib?

Знакомый скинул текст своей программы, она у меня нормально работает и отображает текстуры. Поэтому скорей всего проблема не в библиотеке.
0
Avazart
Эксперт С++
7432 / 5471 / 310
Регистрация: 10.12.2010
Сообщений: 24,384
Записей в блоге: 17
26.12.2012, 22:23 #24
glaux.lib -ругается именно на неё, как я понял линкер не может найти в ней указанные ф-ции...

Добавлено через 3 минуты
Что за файл tkimage ?
1
florgas
5 / 4 / 0
Регистрация: 28.09.2010
Сообщений: 355
26.12.2012, 22:41  [ТС] #25
glaux.lib рабочая. Проверял.
Что такое tkimage не имею понятия.
0
Avazart
Эксперт С++
7432 / 5471 / 310
Регистрация: 10.12.2010
Сообщений: 24,384
Записей в блоге: 17
26.12.2012, 22:43 #26
tkimage модуль походу какой-то cpp или h, если ругается на его объектный файл
0
florgas
5 / 4 / 0
Регистрация: 28.09.2010
Сообщений: 355
26.12.2012, 22:47  [ТС] #27
Что делать-то?
0
Avazart
Эксперт С++
7432 / 5471 / 310
Регистрация: 10.12.2010
Сообщений: 24,384
Записей в блоге: 17
26.12.2012, 22:51 #28
Метом исключения кода попытать выяснить вызов какой/каких ф-ций вызывает подобные ошибки

Добавлено через 1 минуту
Потому как непонятно откуда нарисовалась ф-ция _RawImageOpenAW() может внутренняя
1
programina
1916 / 601 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
26.12.2012, 23:01 #29
Вот нагуглила, tkimage.c который определяет эту функцию, если не ошибаюсь, то она требует юникодовые аргументы
Кликните здесь для просмотра всего текста

C
/*
 * (c) Copyright 1993, Silicon Graphics, Inc.
 * ALL RIGHTS RESERVED
 * Permission to use, copy, modify, and distribute this software for
 * any purpose and without fee is hereby granted, provided that the above
 * copyright notice appear in all copies and that both the copyright notice
 * and this permission notice appear in supporting documentation, and that
 * the name of Silicon Graphics, Inc. not be used in advertising
 * or publicity pertaining to distribution of the software without specific,
 * written prior permission.
 *
 * THE MATERIAL EMBODIED ON THIS SOFTWARE IS PROVIDED TO YOU "AS-IS"
 * AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR OTHERWISE,
 * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY OR
 * FITNESS FOR A PARTICULAR PURPOSE.  IN NO EVENT SHALL SILICON
 * GRAPHICS, INC.  BE LIABLE TO YOU OR ANYONE ELSE FOR ANY DIRECT,
 * SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY
 * KIND, OR ANY DAMAGES WHATSOEVER, INCLUDING WITHOUT LIMITATION,
 * LOSS OF PROFIT, LOSS OF USE, SAVINGS OR REVENUE, OR THE CLAIMS OF
 * THIRD PARTIES, WHETHER OR NOT SILICON GRAPHICS, INC.  HAS BEEN
 * ADVISED OF THE POSSIBILITY OF SUCH LOSS, HOWEVER CAUSED AND ON
 * ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE
 * POSSESSION, USE OR PERFORMANCE OF THIS SOFTWARE.
 *
 * US Government Users Restricted Rights
 * Use, duplication, or disclosure by the Government is subject to
 * restrictions set forth in FAR 52.227.19(c)(2) or subparagraph
 * (c)(1)(ii) of the Rights in Technical Data and Computer Software
 * clause at DFARS 252.227-7013 and/or in similar or successor
 * clauses in the FAR or the DOD or NASA FAR Supplement.
 * Unpublished-- rights reserved under the copyright laws of the
 * United States.  Contractor/manufacturer is Silicon Graphics,
 * Inc., 2011 N.  Shoreline Blvd., Mountain View, CA 94039-7311.
 *
 * OpenGL(TM) is a trademark of Silicon Graphics, Inc.
 */
#include <windows.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "tk.h"
#define static
#define IMAGIC      0x01da
#define IMAGIC_SWAP 0xda01
#define SWAP_SHORT_BYTES(x) ((((x) & 0xff) << 8) | (((x) & 0xff00) >> 8))
#define SWAP_LONG_BYTES(x) (((((x) & 0xff) << 24) | (((x) & 0xff00) << 8)) | 
                            ((((x) & 0xff0000) >> 8) | (((x) & 0xff000000) >> 24)))
typedef struct _rawImageRec {
    unsigned short imagic;
    unsigned short type;
    unsigned short dim;
    unsigned short sizeX, sizeY, sizeZ;
    unsigned long min, max;
    unsigned long wasteBytes;
    char name[80];
    unsigned long colorMap;
    HANDLE file;
    unsigned char *tmp, *tmpR, *tmpG, *tmpB;
    unsigned long rleEnd;
    unsigned long *rowStart;
    long *rowSize;
} rawImageRec;
static void RawImageClose(rawImageRec *raw);
static rawImageRec *RawImageOpenAW(char *fileName, BOOL bUnicode)
{
    rawImageRec *raw;
    unsigned long *rowStart, *rowSize, ulTmp;
    int x;
    DWORD dwBytesRead;
    raw = (rawImageRec *)malloc(sizeof(rawImageRec));
    if (raw == NULL) {
        MESSAGEBOX(GetFocus(), "Out of memory.", "Error", MB_OK);
        return NULL;
    }
    raw->file = bUnicode ? CreateFileW((LPWSTR) fileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, 0) :
                           CreateFileA((LPSTR) fileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, 0);
    if (raw->file == INVALID_HANDLE_VALUE) {
        char ach[256];
        bUnicode ? wsprintf(ach, "Failed to open image file %ws.n", fileName) :
                   wsprintf(ach, "Failed to open image file %s.n", fileName);
        MESSAGEBOX(GetFocus(), ach, "Error", MB_OK);
        free( raw );
        return NULL;
    }
    ReadFile(raw->file, (LPVOID) raw, 12, &dwBytesRead, (LPOVERLAPPED) NULL);
    if (raw->imagic == IMAGIC_SWAP) {
        raw->type = SWAP_SHORT_BYTES(raw->type);
        raw->dim = SWAP_SHORT_BYTES(raw->dim);
        raw->sizeX = SWAP_SHORT_BYTES(raw->sizeX);
        raw->sizeY = SWAP_SHORT_BYTES(raw->sizeY);
        raw->sizeZ = SWAP_SHORT_BYTES(raw->sizeZ);
    } else if (raw->imagic != IMAGIC) {
        // magic number is absent - conclude file is invalid (?)
        MESSAGEBOX(GetFocus(), "Invalid rgb file.", "Error", MB_OK);
        RawImageClose( raw );
        return NULL;
    }
        
    raw->tmp = (unsigned char *)malloc(raw->sizeX*256);
    raw->tmpR = (unsigned char *)malloc(raw->sizeX*256);
    raw->tmpG = (unsigned char *)malloc(raw->sizeX*256);
    raw->tmpB = (unsigned char *)malloc(raw->sizeX*256);
    if (raw->tmp == NULL || raw->tmpR == NULL || raw->tmpG == NULL ||
        raw->tmpB == NULL) {
        MESSAGEBOX(GetFocus(), "Out of memory.", "Error", MB_OK);
        RawImageClose( raw );
        return NULL;
    }
    if ((raw->type & 0xFF00) == 0x0100) {
        x = raw->sizeY * raw->sizeZ * sizeof(long);
        raw->rowStart = (unsigned long *)malloc(x);
        raw->rowSize = (long *)malloc(x);
        if (raw->rowStart == NULL || raw->rowSize == NULL) {
            MESSAGEBOX(GetFocus(), "Out of memory.", "Error", MB_OK);
            RawImageClose( raw );
            return NULL;
        }
        raw->rleEnd = 512 + (2 * x);
        SetFilePointer(raw->file, 512, NULL, FILE_BEGIN);
        ReadFile(raw->file, (LPVOID) raw->rowStart, x, &dwBytesRead,
                 (LPOVERLAPPED) NULL);
        ReadFile(raw->file, (LPVOID) raw->rowSize, x, &dwBytesRead,
                 (LPOVERLAPPED) NULL);
        if (raw->imagic == IMAGIC_SWAP) {
            x /= sizeof(long);
            rowStart = raw->rowStart;
            rowSize = raw->rowSize;
            while (x--) {
                ulTmp = *rowStart;
                *rowStart++ = SWAP_LONG_BYTES(ulTmp);
                ulTmp = *rowSize;
                *rowSize++ = SWAP_LONG_BYTES(ulTmp);
            }
        }
    }
    return raw;
}
static void RawImageClose(rawImageRec *raw)
{
    if( !raw )
        return;
    CloseHandle(raw->file);
    if( raw->tmp ) free(raw->tmp);
    if( raw->tmpR ) free(raw->tmpR);
    if( raw->tmpG ) free(raw->tmpG);
    if( raw->tmpB ) free(raw->tmpB);
    free(raw);
}
static void RawImageGetRow(rawImageRec *raw, unsigned char *buf, int y, int z)
{
    unsigned char *iPtr, *oPtr, pixel;
    int count;
    DWORD dwBytesRead;
    if ((raw->type & 0xFF00) == 0x0100) {
        SetFilePointer(raw->file, raw->rowStart[y+z*raw->sizeY], NULL, FILE_BEGIN);
        ReadFile(raw->file, (LPVOID) raw->tmp,
                 (unsigned int)raw->rowSize[y+z*raw->sizeY], &dwBytesRead,
                 (LPOVERLAPPED) NULL);
        iPtr = raw->tmp;
        oPtr = buf;
        while (1) {
            pixel = *iPtr++;
            count = (int)(pixel & 0x7F);
            if (!count) {
                return;
            }
            if (pixel & 0x80) {
                while (count--) {
                    *oPtr++ = *iPtr++;
                }
            } else {
                pixel = *iPtr++;
                while (count--) {
                    *oPtr++ = pixel;
                }
            }
        }
    } else {
        SetFilePointer(raw->file, 512+(y*raw->sizeX)+(z*raw->sizeX*raw->sizeY),
                       NULL, FILE_BEGIN);
        ReadFile(raw->file, (LPVOID) buf, raw->sizeX, &dwBytesRead,
                 (LPOVERLAPPED) NULL);
    }
}
static void RawImageGetData(rawImageRec *raw, TK_RGBImageRec *final)
{
    unsigned char *ptr;
    int i, j;
    final->data = (unsigned char *)malloc((raw->sizeX+1)*(raw->sizeY+1)*4);
    if (final->data == NULL) {
        MESSAGEBOX(GetFocus(), "Out of memory.", "Error", MB_OK);
        return;
    }
    ptr = final->data;
    for (i = 0; i < raw->sizeY; i++) {
        RawImageGetRow(raw, raw->tmpR, i, 0);
        RawImageGetRow(raw, raw->tmpG, i, 1);
        RawImageGetRow(raw, raw->tmpB, i, 2);
        for (j = 0; j < raw->sizeX; j++) {
            *ptr++ = *(raw->tmpR + j);
            *ptr++ = *(raw->tmpG + j);
            *ptr++ = *(raw->tmpB + j);
        }
    }
}
TK_RGBImageRec *tkRGBImageLoad(char *fileName)
{
    return tkRGBImageLoadAW(fileName, FALSE);
}
TK_RGBImageRec *tkRGBImageLoadAW(char *fileName, BOOL bUnicode)
{
    rawImageRec *raw;
    TK_RGBImageRec *final;
    if( !(raw = RawImageOpenAW(fileName, bUnicode)) )
        return NULL;
    final = (TK_RGBImageRec *)malloc(sizeof(TK_RGBImageRec));
    if (final == NULL) {
        MESSAGEBOX(GetFocus(), "Out of memory.", "Error", MB_OK);
        RawImageClose(raw);
        return NULL;
    }
    final->sizeX = raw->sizeX;
    final->sizeY = raw->sizeY;
    RawImageGetData(raw, final);
    RawImageClose(raw);
    return final;
}
0
florgas
5 / 4 / 0
Регистрация: 28.09.2010
Сообщений: 355
26.12.2012, 23:07  [ТС] #30
Я все равно не понимаю что мне делать
0
26.12.2012, 23:07
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.12.2012, 23:07
Привет! Вот еще темы с ответами:

Error C2664: RegisterClassW: невозможно преобразовать параметр 1 из "WNDCLASSEX *" в "const WNDCLASSW *" - C++
почему выдаёт ошибку? int RegClass(WNDPROC Proc,LPCTSTR szName,UINT brBackground){ WNDCLASSEX wc; ...

Преобразовать параметр из "WCHAR [260]" в "const char *" - C++
Подскажите пожалуйста, как &quot; преобразовать параметр из &quot;WCHAR &quot; в &quot;const char *&quot;&quot;? Вот,по коду я думаю понятно будет. Если поставить...

Ошибка при сборке многофайлового проекта: "невозможно преобразовать "int" в "const golf" - C++
Сделал многофайловую программу программу, вот она: //golf.h #include &lt;iostream&gt; #ifndef golg_h_ #define golf_h_ const int Len =...

Где ошибка невозможно преобразовать указатель "this" из "const pers" в "pers &" при выводе объектов через cout - C++
Добрый день! Переписал код из книг Лафоре, создание мультимножества из собственных объектов- справочник телефонный, с именем и фамилией. ...


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

Или воспользуйтесь поиском по форуму:
30
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.