Anonymní profil martin – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil martin – Programujte.comAnonymní profil martin – Programujte.com

 

Příspěvky odeslané z IP adresy 94.112.250.–

C / C++ › CURL, přibívající znaky
31. 5. 2011   #142713

Ahoj,

problém už jsem vyřešil. Nicméně jak jste asi poznali, jsem v Cčku začátečník. I PHP jsem se učil takovýmto způsobem (přečetl si tutorialy a pak pokus/omyl) a dneska si troufám říci, že v PHPčku udělám témeř cokoli a i můj kód vypadá k světu (co by člověk po 7 letech nechtěl, že :) )... U C jsem ve fázi,kdy zkouším, mám za sebou jenom základní tutoriály a v blízkosti bohužel nikoho, kdy by C uměl a mohl mi pomáhat. Proto se ptám.

Vím, že MaxPocetMist jsem mohl udělat jako const int. Ale v čem je mezi int a const int rozdíl, když pominu, že const před typem z něj udělá akorát konstantu, tudíš jeho hodnotu v kódu už nemůžu měnit. Technicky to to int nezmění ne? nebo ano? v čem?

Co se týče malloc. Měl (resp mám) za to, že když vytvořím ukazatel na char ...resp char* Promena; vytvoří to proměnou o který systém ví, že bude nějakým způsobem pracovat s daty, které jsou uloženy jako char, ale že hodnota týhle proměný bude adresa v 16-kové soustavě. Potom, když si nechám vypsat třeba cout << *Promena;, tak tou hvezdickou řikám, abysi systém vzal hodnotu týhle proměný, použil jí jako adresu a na to daný místo se koukl a vytáhl data z toho místa a zpracoval jako (v mém případě) char. ... funkcí malloc jsem si nechal alokovat místo pro proměnou char dlouhou x počet znaků. funkce mi vrátila adresu, resp počáteční bod, a ten jsem nahrál do proměné Dotaz. Poté jsem na to místo v paměti přes proměnou dotaz uložil data "dotaz". Co jsem tedy udělal špatně?


Určitě uvítám vaše postřehy a připomínky :)

S pozdravem,
Michal

Lokutus7323
C / C++ › ovládat konzoli přes jinou k…
16. 2. 2011   #138979

Spis myslim, ze mu jde o to, aby mel dva oddelene EXacE a ty si za chodu mohli posilat informace. Na urovni program > program, bez zapojeni site.

Lokutus7323
C / C++ › Chybné načtení BMP
16. 2. 2011   #138974

ok,děkuju ti za vysvětlení. Hned se na to kouknu :)

Ten kód pro zpracování BMP hlaviček mám samozřejmě dán stranou. Podle toho co jsem pochopil, tak tahal z hlaviček stejně "jen" šířku a výšku obrázku (jestli se pletu, opravte me). Což je sice důležité, ale v případě, že mi kód nefunguje,výšku a šířku u testovací textury znám, nechtěl jsem si zbytečně udělat chybu právě ještě třeba v hlavičkách.

Výhoda PHP byla v tom, že když jsem něčemu nerozuměl, nechal jsem si obsah proměnné prostě vypsat pomocí ECHO();. a nastudoval problém kousek po kousku. U C to alespoň s mými znalostmi neumím a tak pro mě objevování některých chyb je docela složité. Kdyby se mi tenhle problém stal v PHP, zřejmě bych si nechal vypsat veškerý obsah proměnné z funkce fread() a kouknul se, kde se co děje špatně, či na co jsem zapoměl, že mi kód takhle "vynechá pár pixelů", bohužel se mi to stalo v C a chvílemi nechápu, co vůbec u počítače dělám a že bych se měl radši vzdálit.

Lokutus7323
C / C++ › Chybné načtení BMP
16. 2. 2011   #138943

Včera večer jsem si definici dohledal a našel, že řádkem #define GL_BGR 0x80E0 je přiřazena hodnota 0x80E0. Tudíš jsem na dané místo ve funkci glTexImage2d() dosadil přímo tuto hodnotu. A ejhle, všechno šlape jak má. Ale jak to, že to předtím nefungovalo, když je to v hlavičkové souboru dle mě korektně definováno?

Stále mi bohužel přetrvává problém se ztrátou cca 20px v posledním řádku souboru, viz příspěvek nahoře :-/.

Lokutus7323
C / C++ › Chybné načtení BMP
15. 2. 2011   #138927

Dobrý večer,
tak jsem zas tu. Po celém dni, kdy jsem se opět zkoušel prokousat OpenGL a načítáním BMP textur jsem došel až do bodu. Kdy texturu načtu z externího BMP souboru, ale:

1)místo aby se pak zobrazila jako standardní RGB. Se zobrazují barvy červená a modrá prohozené, resp.: podle modelu BRG.

2) v levém dolním rohu textury chybí cca 20 pixelů v jedom řádku (textura má být zcela jistě v techto místech pouze červená). Zkoušel jsem alokovat více místa, bez reakce, myslím si tedy, že nedostatkem místa v proměnné chyba nevzniká.

Přikládám tedy celý projekt. Včetkě BMP, zdrojových kódu,atd.

Jedná se o tuto část kódu:

    

int width_t, height_t;
width_t=256;
height_t=256;
FILE *fin;
char *prom;
fin=fopen("zk.bmp", "r");
prom=(char*)malloc(width_t*height_t*3);
cout << fread(prom, width_t*height_t*3,sizeof(unsigned char), fin) << endl;
cout << pes << endl;

glPixelStorei(GL_UNPACK_ALIGNMENT, 1); // zpusob ulozeni bytu v texture
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); // opakovani textury
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); // volba filtru
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, // nahrani rastrovych dat do textury
height_t, height_t,
0, GL_RGB, GL_UNSIGNED_BYTE, prom);
glHint(GL_PERSPECTIVE_CORRECTION_HINT,GL_NICEST);// vylepseni zobrazovani
glEnable(GL_TEXTURE_2D);


K prvnímu problému: Četl jsem, že by se problém RGB a BGR dal vyřešit přepsáním:
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB,

height_t, height_t,
0, GL_BGR, GL_UNSIGNED_BYTE, prom);

POložky GL_RGB na GL_BRG. Dokonce i v dokumentaci k této funkci je tato možnost i tyto hodnoty přípustné. Když je to ovšem udělám, kompilátor vyhodí chybu [quote] 75 C:\Users\Lokutus7323\Documents\Projekty v C++\OpenGL\main.cpp `GL_BGR' was not declared in this scope[/quote]


Děkuji

Lokutus7323
C / C++ › Načítání BMP přes C++
14. 2. 2011   #138872

V cem je tedy problem, ze program nedela to co ma?? To je ten tutorial spatne napsany?

Lokutus7323
C / C++ › Načítání BMP přes C++
14. 2. 2011   #138869

Dobrý den,
na internetu čistě ze zvědavosti studuji seriály od OpenGL v C++. Narazil jsem na kus kódu zabývajícím se texturami. Víceméně funguje jak má, akorát se nenačítají BMP obrázky v následujícíc části kódu:

int BMPTextura(int texture, const char *filename)

{

FILE *fin;
int width, height, bpp=0;
int size;
unsigned char *bitmap;
unsigned char bmpHeader[54]={0x42, 0x4d, // magicke cislo souboru BMP
0x00, 0x00, 0x00, 0x00, // velikost souboru
0x00, 0x00, 0x00, 0x00, // rezervovano, vzdy nastaveno na nula
0x36, 0x04, 0x00, 0x00, // data offset=54
0x28, 0x00, 0x00, 0x00, // velikost hlavicky=40
0x00, 0x00, 0x00, 0x00, // sirka obrazku v pixelech=?
0x00, 0x00, 0x00, 0x00, // vyska obrazku v pixelech=?
0x01, 0x00, // pocet bitovych rovin=1
0x08, 0x00, // pocet bitu na pixel=24
0x00, 0x00, 0x00, 0x00, // metoda komprimace=nic
0x00, 0x00, 0x00, 0x00, // velikost bitmapy
0x00, 0x00, 0x00, 0x00, // pocet pixelu na metr v horizontalnim smeru
0x00, 0x00, 0x00, 0x00, // pocet pixelu na metr ve vertikalnim smeru
0x00, 0x00, 0x00, 0x00, // pocet pouzitych barev
0x00, 0x00, 0x00, 0x00, // pocet dulezitych barev
};

if (!filename)return -1;
fin=fopen(filename,"r");
if (!fin) return -1; // otevreni souboru se nezdarilo
if (fread(bmpHeader, 54, 1, fin)!=1) return -1; // nacist hlavicku BMP souboru
memcpy(&width, bmpHeader+18, 4); // sirka obrazku v pixelech
memcpy(&height, bmpHeader+22, 4); // vyska obrazku v pixelech
memcpy(&bpp, bmpHeader+28, 2); // pocet bitu na pixel
if (bpp!=24) return -1;
size=width*height*3;
bitmap=(unsigned char *)malloc(size*sizeof(unsigned char));
if (fread(bitmap, size, sizeof(unsigned char), fin)!=1)return -1; //nacteni rastrovych dat
fclose(fin);
glBindTexture(GL_TEXTURE_2D, texture);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
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, width, height,// nacteni textury do GPU
0, GL_RGB, GL_UNSIGNED_BYTE, bitmap);
free(bitmap);
return 0;
}


Chyba vzniká na řádku
if (fread(bitmap, size, sizeof(unsigned char), fin)!=1)return -1; //nacteni rastrovych dat


kde funkce fread nevyhodí 1 jak by měla, ale 0. A já stále nemuhu přijít na ti proč a tak Vás prosím o radu. Určitě to bude něco banálního, ale já si s tím bohužel nevím rady.

Děkuji předem Všem, kdo poradí nebo napíšou svůj postřeh.

martin
Matematika › pravděpodobnost
1. 10. 2010   #134169

příklad na 5 minut a já si nad ním lámu hlavu 2 hodiny....díky moc chlape

martin
Matematika › pravděpodobnost
1. 10. 2010   #134167

u b) myslíš "vs" jako x (krát) ?

martin
Matematika › pravděpodobnost
1. 10. 2010   #134165

prosím o pomoc příkladem :
Pokud se naučíte ke zkoušce z 50 otázek pouze 25,jakou máte pravděpodobnost, že z vytažených otázek budete znát
a)všechny 3
b)alespoň 2
c nejvýše 1

předem díky

C / C++ › Podmínka if (wParam &amp; MK…
12. 7. 2010   #131315

Děkuji za vyčerpávající odpověď :) , až nyní jsem svědkem toho, že mohu využít svoje znalosti z předmětu "Číslicová technika" kde jsme podobne operace probírali. Jelikož jsme z c++ začal nedávno,ještě furt mi to myslí v PHP, kde by podobná věc byla řešena místo "&" znaménky "==", proto mě to udivilo... ještě jednou tedy děkuji za vysvětlení

C / C++ › Podmínka if (wParam &amp; MK…
11. 7. 2010   #131290

Dobrý den,

pročítám zde i jinde seriály o Win32 API. V jednom ukázkovém případu jsem našel zápis



if (wParam & MK_CONTROL){
/*určitá podmínka*/
}


mě by zajímalo co znamená to znaménko "&" ..vím,že kdyby byli dvě,tak by to to bylo jako AND (resp.: "a zároveň") .. jde mi o pochopení,co verze s tímto jedním znamínkem "&" znamená a kdy jí použít,event proč?..

Děkuji

C / C++ › Smazání obsahu okna Win32 AP…
10. 7. 2010   #131273

Dobrý den,
před nedávnem jsem začal s C++ a WIN32 API ... avšak mám jeden zásadní problém. celý den hledám na internetu a už začínám mít na slovo "handle" alergii, ale svůj problém jsem furt nevyřešil... mám program, jedno okno, které má klasickou nabídku (soubor,atd) a ve svém těle má namalovanou při spuštění čáru. Já chci jenom aby,když otevřu nabídku soubor, kliknu na položku "nový" tak aby čára která je v těle okna aktuálně vymazala a namalovala jiná ... repsektive jde mi o to,jak okno donutit aby na nějakou určitou akci změnil jeho obsah.



#include <windows.h>

#define IDM_NEW 40001

LRESULT CALLBACK ProceduraOkna(HWND hWnd, UINT uZprava, WPARAM wParam, LPARAM lParam);

int CALLBACK WinMain(HINSTANCE hInstance,HINSTANCE hInstancePredchozi,LPSTR lpCmdLine, int iCmdShow){

HWND hWnd;
TCHAR JmenoOkna[] = TEXT("Win32 API Zkouška");
MSG msg;
WNDCLASSEX wc;

wc.cbSize=sizeof(wc);
wc.style= CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc=ProceduraOkna;
wc.cbClsExtra=0;
wc.cbWndExtra=0;
wc.hInstance=hInstance;
wc.hIcon=LoadIcon(NULL, IDI_APPLICATION);
wc.hCursor=(HCURSOR)LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground=(HBRUSH)(COLOR_WINDOW);
wc.lpszMenuName="MAINMENU";
wc.lpszClassName=JmenoOkna;
wc.hIconSm=NULL;

RegisterClassEx(&wc);

hWnd = CreateWindowEx(
0,
JmenoOkna,
JmenoOkna,
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL
);

ShowWindow(hWnd, iCmdShow);

UpdateWindow(hWnd);
while(GetMessage(&msg, NULL, 0, 0)){
TranslateMessage(&msg);
DispatchMessage(&msg);
};
return msg.wParam;


}

LRESULT CALLBACK ProceduraOkna(HWND hWnd, UINT uZprava, WPARAM wParam, LPARAM lParam){
PAINTSTRUCT ps;
HDC hDC;
HMENU hMenu;
switch (uZprava){
case WM_DESTROY:
PostQuitMessage(0);
return 0;
case WM_PAINT:
hDC=BeginPaint(hWnd,&ps);
MoveToEx(hDC,10,10,NULL);
LineTo(hDC,100,100);
EndPaint(hWnd, &ps);
return 0;

case WM_COMMAND:

switch (LOWORD(wParam)){

case IDM_NEW:

SendMessage(hWnd,WM_PAINT,NULL,NULL);
hDC=BeginPaint(hWnd,&ps);
MoveToEx(hDC,10,10,NULL);
LineTo(hDC,150,150);
EndPaint(hWnd, &ps);
return 0;
};
};

return DefWindowProc(hWnd, uZprava, wParam, lParam);
};



Budu rád za všechny Vaše odpovědi.Děkuji

PS: v kódu je i něco to jak jsem se pokoušel problém vyřešit

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý