- 浏览: 159913 次
- 性别:
- 来自: 广州
最新评论
-
雷蕾_ing:
...
python 模拟POST -
blink31:
TextOut不能换行,请问有其他的解决办法吗?
C++下的OpenGL文字显示的完美解决方案 -
lwz7512:
这么强悍!
在优酷的几道笔试题 -
lwz7512:
下了,谢谢分享!
opengl3D台球源代码 -
xltank:
今天过期了。。。
flash builder 序列号
loadbmp.h
#ifndef _LOADBMP_H_
#define _LOADBMP_H_
typedef unsigned char BYTE;
typedef unsigned short WORD;
typedef unsigned long DWORD;
typedef struct {
/* BITMAPFILEHEADER*/
BYTE bfType[2];
DWORD bfSize;
WORD bfReserved1;
WORD bfReserved2;
DWORD bfOffBits;
} BMPFILEHEAD;
#define FILEHEADSIZE 14
/* windows style*/
typedef struct {
/* BITMAPINFOHEADER*/
DWORD BiSize;
DWORD BiWidth;
DWORD BiHeight;
WORD BiPlanes;
WORD BiBitCount;
DWORD BiCompression;
DWORD BiSizeImage;
DWORD BiXpelsPerMeter;
DWORD BiYpelsPerMeter;
DWORD BiClrUsed;
DWORD BiClrImportant;
} BMPINFOHEAD;
#define INFOHEADSIZE 40
typedef struct _BMP {
BMPINFOHEAD info;
unsigned char *rgba;
unsigned char *yuy2;
unsigned char *yv12;
} BMP, *PBMP;
int LoadBMP(char *name, PBMP pbmp);
int ReleaseBMP(PBMP pbmp);
void rgb_to_yuv(unsigned int r, unsigned int g, unsigned int b,
unsigned int *y, unsigned int *u, unsigned int *v);
#endif/*_LOADBMP_H_*/
loadbmp.c
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>
#include "loadbmp.h"
void rgb_to_yuv(unsigned int r, unsigned int g, unsigned int b,
unsigned int *y, unsigned int *u, unsigned int *v)
{
double dy, du, dv;
dy = (0.257 * (double)r) +
(0.504 * (double)g) + (0.098 * (double)b) + 16.0;
dv= (0.439 * (double)r) - (0.368 * (double)g) - (0.071 * (double)b) +
128.0;
du = -(0.148 * (double)r) - (0.291 * (double)g) +
(0.439 * (double)b) + 128.0;
*y = (unsigned int)dy & 0xff;
*v = (unsigned int)dv & 0xff;
*u = (unsigned int)du & 0xff;
}
static void
convert_to_yv12(PBMP pbmp)
{
int x, y;
unsigned char *in_ptr, *out_ptr_y, *out_ptr_u, *out_ptr_v;
unsigned int Y, U, V;
in_ptr = pbmp->rgba;
out_ptr_y = pbmp->yv12;
out_ptr_u = out_ptr_y + pbmp->info.BiWidth * pbmp->info.BiHeight;
out_ptr_v = out_ptr_u + pbmp->info.BiWidth * pbmp->info.BiHeight / 4;
for (y = 0; y < pbmp->info.BiHeight; y++) {
for (x = 0; x < pbmp->info.BiWidth; x++) {
rgb_to_yuv(in_ptr[0], in_ptr[1], in_ptr[2], &Y, &U, &V);
in_ptr += pbmp->info.BiBitCount / 8;
*out_ptr_y++ = Y;
if (x % 2 == 0 && y % 2 == 0) {
*out_ptr_u++ = V;
*out_ptr_v++ = U;
}
}
}
}
static void
convert_to_yuy2(PBMP pbmp)
{
int x, y;
unsigned char *in, *out;
unsigned int Y, U, V;
in = pbmp->rgba;
out = pbmp->yuy2;
for (y = 0; y < pbmp->info.BiHeight; y++) {
for (x = 0; x < pbmp->info.BiWidth; x++) {
static int cnt = 0;
rgb_to_yuv(in[0], in[1], in[2], &Y, &U, &V);
in += pbmp->info.BiBitCount / 8;
*(out) = Y;
if (cnt %2 == 0)
*(out+1) = V;
else
*(out+1) = U;
out+= 2;
cnt++;
}
}
}
int LoadBMP(char *name, PBMP pbmp)
{
int fd;
int headsize;
BMPFILEHEAD bmpf;
unsigned char headbuffer[INFOHEADSIZE];
fd = open(name, O_RDONLY);
if (fd < 0) {
perror("open");
return -1;
}
read(fd, &headbuffer, FILEHEADSIZE);
bmpf.bfType[0] = headbuffer[0];
bmpf.bfType[1] = headbuffer[1];
if (*(WORD*)&bmpf.bfType[0] != 0x4D42) /* 'BM' */
return -2; /* not bmp image*/
bmpf.bfOffBits = *((DWORD*)&headbuffer[10]);
if (read(fd,&headsize,sizeof(DWORD)) != sizeof(DWORD))
return 0; /* not bmp image*/
read(fd, &headbuffer, INFOHEADSIZE - sizeof(DWORD));
pbmp->info.BiWidth = *(DWORD*)(&headbuffer[0]);
pbmp->info.BiHeight = *(DWORD*)(&headbuffer[4]);
pbmp->info.BiBitCount = *(DWORD*)(&headbuffer[10]);
pbmp->info.BiSizeImage = *(DWORD*)(&headbuffer[16]);
pbmp->rgba = (unsigned char *)malloc(pbmp->info.BiSizeImage);
if (!pbmp->rgba) {
perror("malloc");
exit(EXIT_FAILURE);
}
// pbmp->yuy2 = (unsigned char *)malloc(pbmp->info.BiWidth * pbmp->info.BiHeight * 2);
// if (!pbmp->yuy2) {
// perror("malloc");
// exit(EXIT_FAILURE);
// }
// pbmp->yv12 = (unsigned char *)malloc(pbmp->info.BiWidth * pbmp->info.BiHeight * 3 / 2);
// if (!pbmp->yv12) {
// perror("malloc");
// exit(EXIT_FAILURE);
// }
lseek(fd, bmpf.bfOffBits, SEEK_SET);
if (read(fd, pbmp->rgba, pbmp->info.BiSizeImage) != pbmp->info.BiSizeImage) {
perror("read");
return -4;
}
// convert_to_yv12(pbmp);
// convert_to_yuy2(pbmp);
printf("LoadBMP: %s %ldx%ldx%d\n", name, pbmp->info.BiWidth, pbmp->info.BiHeight, pbmp->info.BiBitCount);
close(fd);
return 0;
}
int ReleaseBMP(PBMP pbmp)
{
if (pbmp->rgba) {
free(pbmp->rgba);
pbmp->rgba = NULL;
}
// if (pbmp->yuy2) {
// free(pbmp->yuy2);
// pbmp->yuy2 = NULL;
// }
// if (pbmp->yv12) {
// free(pbmp->yv12);
// pbmp->yv12 = NULL;
// }
return 0;
}
发表评论
-
GUI设计禁忌
2010-01-07 12:02 955本文列举Jeff Johnson:《GUI设计禁忌》一书中 ... -
LOD地形设计(三)
2010-01-05 05:03 989LOD地形根据视点的变化决定是否进行网格分割,因此系统应设计一 ... -
LOD地形设计(二)
2010-01-05 05:02 1185自从LOD地形第一节推出以来,受到不少朋友的关注,本人真是受宠 ... -
LOD地形设计(一)
2010-01-05 05:01 1086在大规模的三维场 ... -
Windows SDK笔记
2009-04-16 16:45 1377应程序需求需要重写窗体内子控件某一特定消息,可怜我苦苦找了 ... -
关于的glut 的配置
2009-02-09 17:46 1668OpenGL 是一套 用于三维作图的API。与Direct3 ... -
OpenGL的消隐与双缓冲(2)
2009-02-09 17:46 1596#include "stdafx.h" ... -
openGL贴图(借助glx),并测试性能(FPS)2
2009-02-09 17:45 1158client.c #include <sys/type ... -
alpha混合技术
2009-02-09 17:44 1467alpha混合技术 alpha混合技术对熟悉游戏的人来说不会 ... -
C语言将raw data(rgb/rgba)写成bmp文件(bmp24或32)
2009-02-09 17:44 3658int bmp_write(unsigned char *im ... -
OpenGL坐标变换专题
2009-02-09 17:43 2504OpenGL通过相机模拟、可 ... -
对话框中OpenGL的设置
2009-02-09 17:43 2140from:http://huhuiowen.blog.16 ... -
OpenGL曲线绘制:线段
2009-02-09 17:42 1821以线段方式绘制曲线。例如:正弦曲线。 glBegin(GL_ ... -
用VC++做OpenGL程序框架时出现非法错误
2009-02-09 17:40 9761.OpenGL.cpp 文件包含的头文件有没有{}不配对的情 ... -
opengl编写游戏的可移植性 具体表现
2009-02-09 17:39 1050OpenGL是个与硬件无关的软件接口,可以在不同的平台如Win ... -
什么是显卡的OpenGL模式
2009-02-09 17:39 1619OpenGL是近几年发展起来的一个性能卓越的三维图形标准。 ... -
关于-opengl在魔兽中的应用
2009-02-09 17:38 1939OpenGL在画质上是优于Direct的,这个“画质”不是指感 ... -
如何让显卡支持OpenGL模式????????
2009-02-09 17:38 3255OPENGL 不支持问题 这也 ... -
opengl3D台球源代码
2009-01-20 09:59 23943D台球,可以平面也可以从不同角度击球,使用OPENGL渲染, ... -
Jeff Molofee(NeHe)的OpenGL教程 - 碰撞检测与模型运动
2009-01-20 09:30 1616原 文 : Lesson 31: Collis ...
相关推荐
C语言读取bmp位图文件(含bmp格式定义)
BMP(Bitmap-File)图形文件是Windows采用的图形文件格式,在Windows环境下运行的所有图象处理软件都支持BMP图象文件格式。...BMP位图文件默认的文件扩展名是BMP或者bmp(有时它也会以.DIB或.RLE作扩展名)。
压缩文件提供: 1. bmp位图文件详细格式分析; 2. bmp位图文件打开,读取功能; 3. bmp位图文件写入,保存功能; 4. bmp位图文件显示到指定控件(如,picture控件上);
[readbmp.rar] - 在visual c++下读取*.bmp位图的信息,并显示位图,点击“查看”->“信息”菜单,弹出对话框中显示色彩位数、图像高度宽度、文件头大小等等信息。 [load_bmp_WINSDK.rar] - 载入位图的源代码,使用...
针对单片机开发的16位TFT显示频的图像显示问题。 本软件可将 分辨率在320*240以下的BMP图像转换为 单片机可用的16进制数据格式。 可进行自己手画,也可以直接打开图片文件,目前只支持BMP格式
采用C语言编程读取24位*.bmp格式位图图像,并显示对应图像的ASCII字符图。(软件平台VC6.0) 将bmp图片进行黑白二值化,并在控制台终端显示对应图像的ASCII字符图
BMP格式读取 保存 DFT FFT 直方图 色调均化 缩放 模糊 锐化 滤镜 形态学处理 曲线 裁剪 灰度图 彩色图 自动阈值 等等...除此之外还有很多其他小功能... 建议使用VS2013打开!!!核心代码在Bmp.cpp中!!! 更新...
通过分析BMP文件的格式, 从而读取并显示BMP文件以及抖动算法的实现 [编程语言] VC++ [显示用例] 如封面 [本实验所用电脑相关配置] CPU:AMD 2500+ 内存:512MB 显卡:NVIDIA GeForce FX 5200 Ultra [理论基础] ...
用C语言实现位图格式的图像读取功能,可直接使用。
C语言MFC写的位图读写器,支持BMP格式文件,可读取、显示、保存图片。内涵两个文件:一个包含执行程序,一个包含源代码。IDE建议VC++6.0及以上版本。程序自己写的,欢迎批评指正。
|------ 2.4 在窗口中绘制设备相关位图,图标,设备无关位图 |------ 2.5 使用各种映射方式 |------ 2.6 多边形和剪贴区域 +-- 第三章 文档视结构 |------ 3.1 文档 视图 框架窗口间的关系和消息传送规律 |------ ...