首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

求JPEG格式图片变换为BMP格式的VB代码

2013-01-06 
求JPEG格式图片转换为BMP格式的VB代码小女子求JPEG格式图片转换为BMP格式的VB代码,不希望有第三方控件,不

求JPEG格式图片转换为BMP格式的VB代码
小女子求JPEG格式图片转换为BMP格式的VB代码,不希望有第三方控件,不知道有没有大侠知道,急用,谢谢帮忙了。
[解决办法]
VB本身就有自带的

Private Sub Command1_Click()
   Picture1.Picture = LoadPicture("c:\test.jpg")
   SavePicture Picture1.Picture, "c:\test.bmp"
End Sub

[解决办法]
对于摄像头的捕获通常分为两种:
1、是采用 DirectShow 的方式进行处理。
2、是通过 VFW 的方式进行处理。
在 VB 中,通常都是试用 VFW 的方式进行处理。因为 DirectShow 虽然也是
以 COM 的方式为接口,不过有些类或处理方式对于VB的支持还是在不那么好,
因为他标准的支持是 VC,所以 DirectShow 对于捕获设备这一块的处理就不考
虑了。既然是 VFW 中做摄像头的捕获,那么有两种方式可以处理:
1、捕获屏幕上显示的摄像头图像
2、从捕获函数接口中取得传过来的数据指针来分析捕获帧的图像数据

从屏幕上捕获图像,方法很简单,直接用一些基本的 GDI 函数就可以处理。
从捕获的函数接口中取得图像数据的方式,很多是根据色彩系统来分析数据的。

比如RGB色彩系统,他返回的就是 R\G\B 的方式,从左到右,从上至下的方式
,以R\G\B 的数据返回到 capSetCallbackOnFrame 设定函数指针的 LPVIDEOHDR 
结构中。

目前市场上大多数的那种免驱动的摄像头都是 YUY2 色彩系统的。
无论他的传输层如何,到了驱动层,系统会以色彩系统的数据方式反馈到你的
LPVIDEOHDR 结构中的 lpData 指针里。
所以,通常只需要了解到色彩系统,就可以讲数据转换并重现出来。
对于YUY2色彩系统与RGB色彩系统的原理是这样的:
其实YUY2也是YUV色彩系统。但是 YUV 是用3个字节并表示一个点色彩的,但
YUY2 是以 4 个字节表示两个色彩点,这样无形中就每两个色彩就节约了两个
字节的数据量。
YUY2的取值是这样的:

Y0 = Byte1
U  = Byte2
Y1 = Byte3
V  = Byte4

具体的处理过程和计算公式可以这样处理


//......
YUVBytesX = x * (LONG)lpYUY2ColorSize;
YUVBytesY = y * YUY2ByteWidthSize;

cY0 = (LONG)lpYUY2Bytes[YUVBytesY + YUVBytesX + 0];
cU  = (LONG)lpYUY2Bytes[YUVBytesY + YUVBytesX + 1];
cY1 = (LONG)lpYUY2Bytes[YUVBytesY + YUVBytesX + 2];
cV  = (LONG)lpYUY2Bytes[YUVBytesY + YUVBytesX + 3] ;

cY0 = cY0 - (LONG)16;
cY1 = cY1 - (LONG)16;
cU = cU - (LONG)128;
cV = cV - (LONG)128;

if(cY0>(LONG)255){ cY0=(LONG)255; }else if(cY0<(LONG)0){ cY0=(LONG)0; }
if(cY1>(LONG)255){ cY1=(LONG)255; }else if(cY1<(LONG)0){ cY1=(LONG)0; }

ColorR1 = (LONG)((cY0 * (LONG)298 + cV * (LONG)409 + (LONG)128)>>(LONG)8);
ColorG1 = (LONG)((cY0 * (LONG)298 - cU * (LONG)100 - cV * (LONG)208 + (LONG)128)>>(LONG)8);
ColorB1 = (LONG)((cY0 * (LONG)298 + cU * (LONG)516 + (LONG)128)>>(LONG)8);

ColorR2 = (LONG)((cY1 * (LONG)298 + cV * (LONG)409 + (LONG)128)>>(LONG)8);
ColorG2 = (LONG)((cY1 * (LONG)298 - cU * (LONG)100 - cV * (LONG)208 + (LONG)128)>>(LONG)8);
ColorB2 = (LONG)((cY1 * (LONG)298 + cU * (LONG)516 + (LONG)128)>>(LONG)8);

//......

[解决办法]
WDM video Capture 驱动兼容性的问题 ??

下载这个驱动 安装了试试看吧

http://cbm666.net/wdm.rar

热点排行