Youtuberゲーム導館さんの動画を参考にさせていただいて、テクスチャマッピング製作をしているのですが、画像を読み込む際に行うメモリの確保について、初歩的なところですが、わからないところがあったので質問させていただきました。
下のソースコードで、memcpy(&pixels[y * bi.biWidth + x],&bits[y * bi.biWidth + x],sizeof RGB);
memcpy関数で転送先の&pixelsに転送元の&bitsをコピーしていると思うのですが、この処理のxで1加算しポインタ変数に1足したアドレスにコピーを繰り返し行っているとおもうのですが、&bitsにはどのような値が入っているのか疑問に思ったので、質問させていただきました。
「int *bits」このような書き方をすれば、 int型ポインタ変数ができ、bitsには整数を格納することができる。 格納先のアドレスには整数が格納されている。
RGB* bits = (RGB*)malloc(sizeof RGB * bi.biWidth * bi.biHeight);
構造体型ポインタ変数bitsを先に宣言することによって、 bitsの1番目のアドレスにはRGB(unsigned char r, g, b)のunsigned char 型の3つの数値が格納できるということでしょうか?
どなたかわかる方おしえてください<(_ _)>
C++
1 typedef struct { 2 unsigned char r, g, b; 3 }RGB; 4 RGB* bits = (RGB*)malloc(sizeof RGB * bi.biWidth * bi.biHeight); 5 fread(bits, sizeof RGB, bi.biWidth * bi.biHeight, pFile); 6 7 for (int y = 0; y < bi.biHeight; y++) 8 for (int x = 0; x < bi.biWidth; x++) { 9 RGB* pbits = &bits[y * bi.biWidth + x]; 10 //printf("%p\n",pPixels); 11 unsigned char temp = pbits->r; 12 pbits->r = pbits->b; 13 pbits->b = temp; 14 15 } 16 17 for (int y = 0; y < bi.biHeight / 2; y++) 18 for (int x = 0; x < bi.biWidth; x++) { 19 RGB* pbits0 = &bits[y * bi.biWidth + x]; 20 RGB* pbits1 = &bits[(bi.biHeight - 1 - y) * bi.biWidth + x]; 21 RGB temp = *pbits0; 22 *pbits0 = *pbits1; 23 *pbits1 = temp; 24 } 25 26 typedef struct { 27 unsigned char r, g, b, a; 28 }RGBA; 29 RGBA* pixels = (RGBA*)malloc(sizeof RGBA * bi.biWidth * bi.biHeight); 30 31 for (int y = 0; y < bi.biHeight;y++) 32 for (int x = 0; x < bi.biWidth; x++) { 33 memcpy(&pixels[y * bi.biWidth + x],&bits[y * bi.biWidth + x],sizeof RGB);//転送先のアドレス、転送元のアドレス 34 }
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/03/05 00:49