[問題] OpenGl讀取與顯示灰階影像

看板C_and_CPP作者 (aada)時間15年前 (2010/04/16 05:36), 編輯推噓2(206)
留言8則, 3人參與, 最新討論串1/1
大家好, 小弟是初學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)

04/16 14:01, , 1F
fwrite( pad, sizeof(unsigned char), (4-w*1%4)%4, f0 );
04/16 14:01, 1F

04/16 14:27, , 2F
請問樓上是說註解掉那行嗎? 我試了還是出現一樣的錯誤
04/16 14:27, 2F

04/16 14:45, , 3F
8 bpp不是要寫調色盤資訊嗎@_@"
04/16 14:45, 3F

04/16 14:48, , 4F
pad size的計算方式總覺得也怪怪的@_@"
04/16 14:48, 4F

04/16 14:53, , 5F
V大您說的 bpp是指? 他原本pad的算法是(4-w*3%4)%4
04/16 14:53, 5F
※ 編輯: aada 來自: 140.122.192.147 (04/16 14:54)

04/16 14:57, , 6F
就24bpp與8bpp的BMP啊?? 您可以Wiki一下BMP format:)
04/16 14:57, 6F

04/16 15:00, , 7F
對不起pad是小弟我目算算錯了(謎: 幸好我不下圍棋XD)
04/16 15:00, 7F

04/16 15:01, , 8F
我的影像式8bpp的灰階影像, 所以應該沒錯吧
04/16 15:01, 8F
※ 編輯: aada 來自: 140.122.192.147 (04/16 15:11)
文章代碼(AID): #1Bn_TH3c (C_and_CPP)