سؤال

جميع،

وأنا أحاول لتحميل ملف BMP إلى مجموعة GLubyte (دون استخدام اوكس).

وهذا لا يصدق كيف ما فكرت يمكن أن يكون مهمة تافهة هو امتصاص ما يصل ساعات من وقتي.

لا يمكن العثور على ما يبدو أي شيء على جوجل!

وهذا ما اخترق معا ولكن هذا العمل ليس تماما:

// load texture

GLubyte *customTexture;

string fileName("C:\\Development\\Visual Studio 2008\\Projects\\OpenGL_Test\\Crate.bmp");

// Use LoadImage() to get the image loaded into a DIBSection
HBITMAP hBitmap = (HBITMAP)LoadImage( NULL, (LPCTSTR)const_cast<char*>(fileName.c_str()), IMAGE_BITMAP, 0, 0, 
LR_CREATEDIBSECTION | LR_DEFAULTSIZE | LR_LOADFROMFILE );

customTexture = new GLubyte[3*256*256]; // size should be the size of the .bmp file

GetBitmapBits(hBitmap, 3*256*256, (LPVOID) customTexture);

GetBitmapDimensionEx(hBitmap,&szBitmap);

وما يحدث هو الدعوة إلى LoadImage يبدو أن عودته القيمة غير معرف (؟ NULL أنا لست قادرا على معرفة ما اذا كان فعلا تحميل بمب أم لا - قليلا الخلط).

في هذه اللحظة أنا تحويل أفضل الممارسات الإدارية لخام ثم كل شيء سهلا.

وأي شخص لديه أي قصاصة أفضل وأنظف؟

هل كانت مفيدة؟

المحلول

وLoadImage() يمكن تحميل فقط الصور النقطية التي هي جزء لا يتجزأ في الملف القابل للتنفيذ مع المترجم المورد - لا يمكن تحميل الصور النقطية الخارجية من نظام الملفات. لحسن الحظ، ملفات الصور النقطية هي حقا بسيطة لقراءة نفسك. انظر ويكيبيديا للحصول على وصف لتنسيق الملف.

ومجرد فتح الملف وكأنك مع أي ملف آخر (على مهم : لفتحه في الوضع الثنائي، أي مع خيار "rb" باستخدام fopen أو العلم ios::binary باستخدام C ++ ifstream)، قراءة في أبعاد الصورة النقطية، وقراءة في البيانات بكسل الخام.

نصائح أخرى

وو<م> هو مهمة مشتركة، وهذا هو السبب في glaux، من بين أمور أخرى، يعطيك وظائف لذلك.

وقراءة صورة نقطية هو مسألة تافهة، وخاصة إذا كان هناك فقط عمق واحد / BPP لحساب.

وانظر أيضا <لأ href = "https://stackoverflow.com/questions/199403/c-whats-the-simplest-way-to-read-and-write-bmp-files-using-c-on- نوافذ "> هذا السؤال .

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top