procedure TForm1.Draw; var Bmp: TBitmap; begin Bmp := TBitmap.Create; Bmp.LoadFromFile(ExtractFilePath(ParamStr(0)) + '1.bmp'); // 清空缓冲区 glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT); // TBitmap的图像数据在内存中是按行倒序连续存放的,通过TBitmap.ScanLine[TBitmap.Height-1]可以取得首地址即图像缓冲区地址 // bmp图片的颜色是按b g r存储的,所以要选 GL_BGR_EXT做为参数 glDrawPixels(Bmp.Width, Bmp.Height, GL_BGR_EXT, GL_UNSIGNED_BYTE, Bmp.ScanLine[Bmp.Height - 1]); SwapBuffers(FDC); Bmp.Free; end;
// RGB数据的结构体 TAUX_RGBImageRec = record sizeX, sizeY: GLint; data: pointer; end; PTAUX_RGBImageRec = ^TAUX_RGBImageRec; var p: PTAUX_RGBImageRec; begin p := auxDIBImageLoadA(PAnsiChar(ExtractFilePath(ParamStr(0)) + '1.bmp')); // p 怎么释放? Dispose与Freemem都无法操作这个指针 end;
var Bmp: TBitmap; begin Bmp := TBitmap.Create; TBitmap.LoadFromFile(ExtractFilePath(ParamStr(0)) + '1.bmp'); // do something // 用完释放 Bmp.Free; end;
// 创建纹理区域 glGenTextures(1, @texture); // 绑定纹理区域 glBindTexture(GL_TEXTURE_2D, texture); // 使用位图创建图像纹理 glTexImage2D( GL_TEXTURE_2D, // 纹理是一个2D纹理 GL_TEXTURE_2D 0, // 图像的详细程度 默认 0 3, // 数据的成分数。因为图像是由红,绿,蓝三种组成 默认3 Bmp.Width, // 纹理的宽度 Bmp.Height, // 纹理的高度 0, // 边框的值 默认 0 GL_BGR_EXT, // 数据格式 bmp使用 bgr GL_UNSIGNED_BYTE, // 组成图像的数据是无符号字节类型的 Bmp.ScanLine[Bmp.Height - 1] // DIB数据指针 ); // 下面两行是让opengl在放大原始的纹理大(GL_TEXTURE_MAG_FILTER)或缩小原始纹理(GL_TEXTURE_MIN_FILTER)时OpenGL采用的滤波方式。 // GL_LINEAR 使用线性滤波,可以把图片处理处平滑,但需要更多的内存与CPU glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); // 线形滤波 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); // 线形滤波
// 以下是绘图,利用一个四边形,绘制图片 // 启用纹理映射 if glIsEnabled(GL_TEXTURE_2D) = 0 then glEnable(GL_TEXTURE_2D); // 清空缓冲区 glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT); l := 10; t := 10; w := 200; // 放大为200*200的图片 // 选择纹理 如果场景中使用多个纹理,不能在glBegin() 和 glEnd() 之间绑定纹理 glBindTexture(GL_TEXTURE_2D, texture); glBegin(GL_QUADS); // glTexCoord2f 的第一个参数是X坐标。 // 0.0是纹理的左侧。 0.5是纹理的中点, 1.0是纹理的右侧。 // glTexCoord2f 的第二个参数是Y坐标。 // 0.0是纹理的底部。 0.5是纹理的中点, 1.0是纹理的顶部。 glTexCoord2f(0, 1); glVertex2f(l, t); glTexCoord2f(1, 1); glVertex2f(l + w, t); glTexCoord2f(1, 0); glVertex2f(l + w, t + w); glTexCoord2f(0, 0); glVertex2f(l, t + w); glEnd();
procedure TForm1.Draw; var Bmp: TBitmap; texture: GLuint; l, t, w: Integer; begin Bmp := TBitmap.Create; Bmp.LoadFromFile(ExtractFilePath(ParamStr(0)) + '1.bmp'); // 创建纹理区域 glGenTextures(1, @texture); // 绑定纹理区域 glBindTexture(GL_TEXTURE_2D, texture); // 使用位图创建图像纹理 glTexImage2D( GL_TEXTURE_2D, // 纹理是一个2D纹理 GL_TEXTURE_2D 0, // 图像的详细程度 默认 0 3, // 数据的成分数。因为图像是由红,绿,蓝三种组成 默认3 Bmp.Width, // 纹理的宽度 Bmp.Height, // 纹理的高度 0, // 边框的值 默认 0 GL_BGR_EXT, // 数据格式 bmp使用 bgr GL_UNSIGNED_BYTE, // 组成图像的数据是无符号字节类型的 Bmp.ScanLine[Bmp.Height - 1] // DIB数据指针 ); // 下面两行是让opengl在放大原始的纹理大(GL_TEXTURE_MAG_FILTER)或缩小原始纹理(GL_TEXTURE_MIN_FILTER)时OpenGL采用的滤波方式。 // GL_LINEAR 使用线性滤波,可以把图片处理处平滑,但需要更多的内存与CPU glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); // 线形滤波 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); // 线形滤波 // 以下是绘图,利用一个四边形,绘制图片 // 启用纹理映射 if glIsEnabled(GL_TEXTURE_2D) = 0 then glEnable(GL_TEXTURE_2D); // 清空缓冲区 glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT); l := 10; t := 10; w := 200; // 放大为200*200的图片 // 选择纹理 如果场景中使用多个纹理,不能在glBegin() 和 glEnd() 之间绑定纹理 glBindTexture(GL_TEXTURE_2D, texture); glBegin(GL_QUADS); // glTexCoord2f 的第一个参数是X坐标。 // 0.0是纹理的左侧。 0.5是纹理的中点, 1.0是纹理的右侧。 // glTexCoord2f 的第二个参数是Y坐标。 // 0.0是纹理的底部。 0.5是纹理的中点, 1.0是纹理的顶部。 glTexCoord2f(0, 1); glVertex2f(l, t); glTexCoord2f(1, 1); glVertex2f(l + w, t); glTexCoord2f(1, 0); glVertex2f(l + w, t + w); glTexCoord2f(0, 0); glVertex2f(l, t + w); glEnd(); Bmp.Free; SwapBuffers(FDC); end;
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有