看板 C_and_CPP 關於我們 聯絡資訊
大家好, 小弟是初學OpenGL的新手, 有些問題寫請教, 我目前在測試 "讀取與顯示灰階影像", 看到programmer-club的白老鼠大大也分享了這樣的code(彩色影像), 那麼我想說由於彩色bmp是24bit, 灰階是8bit, 把彩色*3, 改為灰階*1, 就把程式改了一下, 如下所示: void GBmp::save( const char *spath ) { bmp_header_info bhi; bhi.bfType = 'MB'; bhi.bfSize = w*h*1*sizeof(unsigned char) + sizeof(bhi); bhi.bfReserved1 = 0; bhi.bfReserved2 = 0; bhi.bfOffBits = sizeof(bhi); bhi.biSize = 40; bhi.biWidth = w; bhi.biHeight = h; bhi.biPlanes = 1; bhi.biBitCount = 8; bhi.biCompression = 0; bhi.biSizeImage = 0; bhi.biXpelsPerMeter = 0; bhi.biYpelsPerMeter = 0; bhi.biClrUsed = 0; bhi.biClrImportant = 0; int j; GBmp a; a.load( w,h, rgb ); //a.rb_swap(); unsigned char pad[3] = {0}; FILE *f0 = fopen( spath, "wb" ); fwrite( &bhi, sizeof(bmp_header_info), 1, f0 ); for( j=0; j<h; j++ ) { fwrite( &a.rgb[j*w*1], sizeof(unsigned char), w*1, f0 ); fwrite( pad, sizeof(unsigned char), (4-w*1%4)%4, f0 ); } fclose(f0); } 程式功能是可以讀取與顯示, 但是我關掉時會出現錯誤 錯誤訊息, after Normal block (#73) at 0x02020068. CRT detected that the application wrote to memory after end of heap buffer. 白老鼠大的code(programmer club) http://ppt.cc/-yKr 主程式code #include <stdio.h> #include "GL/glut.h" #include "g_bmp.h" GBmp bm0; void display() { glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); glRasterPos2f( -bm0.w/512.0, -bm0.h/512.0 ); glDrawPixels( bm0.w, bm0.h, GL_LUMINANCE, GL_UNSIGNED_BYTE, bm0.rgb ); glutSwapBuffers(); } int main( int argc, char** argv ) { glutInit(&argc, argv); glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH | GLUT_RGBA ); glutInitWindowSize( 512, 512 ); glutInitWindowPosition (100, 100); glutCreateWindow( "hihi" ); glPixelStorei(GL_UNPACK_ALIGNMENT, 1); glutDisplayFunc(display); bm0.load( "c.bmp" ); glutMainLoop(); } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.122.192.147 ※ 編輯: aada 來自: 140.122.192.147 (04/16 13:36) ※ 編輯: aada 來自: 140.122.192.147 (04/16 13:37)
pico2k:fwrite( pad, sizeof(unsigned char), (4-w*1%4)%4, f0 ); 04/16 14:01
aada:請問樓上是說註解掉那行嗎? 我試了還是出現一樣的錯誤 04/16 14:27
VictorTom:8 bpp不是要寫調色盤資訊嗎@_@" 04/16 14:45
VictorTom:pad size的計算方式總覺得也怪怪的@_@" 04/16 14:48
aada:V大您說的 bpp是指? 他原本pad的算法是(4-w*3%4)%4 04/16 14:53
※ 編輯: aada 來自: 140.122.192.147 (04/16 14:54)
VictorTom:就24bpp與8bpp的BMP啊?? 您可以Wiki一下BMP format:) 04/16 14:57
VictorTom:對不起pad是小弟我目算算錯了(謎: 幸好我不下圍棋XD) 04/16 15:00
aada:我的影像式8bpp的灰階影像, 所以應該沒錯吧 04/16 15:01
※ 編輯: aada 來自: 140.122.192.147 (04/16 15:11)