作者aada (aada)
看板C_and_CPP
標題[問題] OpenGL讀取與顯示灰階影像
時間Fri Apr 16 13:36:13 2010
大家好, 小弟是初學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)