文档章节

BGR32转RGB24快速转换算法

h
 huangfujiang
发布于 2015/01/29 22:08
字数 360
阅读 80
收藏 0

    

     1. 普通转换算法

/*

 *   BGRA BGRA  BGRA  BGRA  => BGA BGA BGA

 *  @pDes: BGA  BGA 

 *  @pSrc: BGRA BGRA

*/

int nFrameSize  = nWidth * nHeight * 4;

char * pDes = (char *)pMemory->lpData;

char * pSrc = (char *)pVideo;


for(int i=0;i<nHeight;i++)

{

    for(int j=0;j<nWidth;j++)

    {

                 for(int k=0;k<3;k++)

                {

                       pDes[i*nWidth*3+j*3+k] = pSrc[nFrameSize - (i+1)*nWidth*4+j*4+k];

                }

    }

}


   2. 正序快速算法

/*

 *   BGRA BGRA  BGRA  BGRA  => BGA BGA BGA

 *  @pDes: BGA  BGA 

 *  @pSrc: BGRA BGRA

*/

int nFrameSize  = nWidth * nHeight * 4;

int *pDes = (int *)pMemory->lpData;

int *pSrc = (int *)pVideo;

/*

* BGRA=>RGB24 正序快速算法

for( int i=0; i<nFrameSize>>2 - 1; i++)  // 防止内存玷污算法

{

     *pDes = *(pSrc + i); pDes = (int *)( (char *)pDes + 3 );

}

*( ( (char *)pDes ) + 0 ) = *( ( (char *)pSrc ) + 0 ); 

*( ( (char *)pDes ) + 1 ) = *( ( (char *)pSrc ) + 1 );

*( ( (char *)pDes ) + 2 ) = *( ( (char *)pSrc ) + 2 ); 

*/


   3. 倒序快速算法

/*

 *   BGRA BGRA  BGRA  BGRA  => BGA BGA BGA

 *  @pDes: BGA  BGA 

 *  @pSrc: BGRA BGRA

*/

int nFrameSize  = nWidth * nHeight * 4;

int *pDes = (int *)pMemory->lpData;

int *pSrc = (int *)pVideo;

for( int i=0; i<nHeight; i++ )

{

    pSrc = (int *)pVideo + (nHeight - i - 1) * nWidth; // nFrameSize>>2 - ( i + 1 ) * nWidth;

    for( int j=0; j<nWidth-1; j++ ) // 防止内存玷污算法

    {

    *pDes = *(pSrc + j); pDes = (int *)( (char *)pDes + 3 );

    }


    *( ( (char *)pDes ) + 0 ) = *( ( (char *)pSrc ) + 0 ); // B

    *( ( (char *)pDes ) + 1 ) = *( ( (char *)pSrc ) + 1 ); // G

    *( ( (char *)pDes ) + 2 ) = *( ( (char *)pSrc ) + 2 ); // R

    

    pDes = (int *)( (char *)pDes + 3 ); // 目的地址调整算法

}


经测试统计:快速转换算法比普通转换算法效率提高至少3倍以上。


© 著作权归作者所有

共有 人打赏支持
h
粉丝 0
博文 1
码字总数 360
作品 0
西安
高级程序员
私信 提问
漫水填充及Photoshop中魔术棒选择工具的实现

今天写程序中有一个地方用到了漫水填充(FloodFill)。所谓漫水填充,简单来说,如下图中左图,白布上有一块红色的斑点,在这个红色的斑点上点一下,就自动选中了和该点相连的红色的区域,接...

最美的回忆
2017/05/10
0
0
视音频数据处理入门:RGB、YUV像素数据处理

===================================================== 视音频数据处理入门系列文章: 视音频数据处理入门:RGB、YUV像素数据处理 视音频数据处理入门:PCM音频采样数据处理 视音频数据处理...

leixiaohua1020
2016/01/29
0
0
有关利用ffmpeg实现RGB48图像转换为YUV422时遇到的问题

我打算利用ffmpeg的swscale接口将RGB48图像转换为YUV422(进而生成为MP4视频文件),但发现转换后的YUV422图像的颜色严重失真。另外,我尝试了将RGB24转换成YUV422或420就都没有问题。 下面是...

LavenderSs
2016/05/10
418
2
黄老邪/AVDataProcess

视音频数据处理入门 准备 yuv视频下载: http://trace.eas.asu.edu/yuv/ yuv播放器:修改了一个YUV/RGB播放器 注意: 本文中像素的采样位数一律为8bit。由于1Byte=8bit,所以一个像素的一个分...

黄老邪
2017/10/19
0
0
一个简单的 YUV 播放器--YUVPlayer

工程说明 VS2010 MFC工程,源码有部分参考Yuvviewer代码,界面参考YUV Player Deluxe风格。 参数设置界面: 关于界面: 功能 可播放各种格式的YUV文件。 默认预留常见分辨率,同时支持自定义...

latelee
2017/03/29
417
1

没有更多内容

加载失败,请刷新页面

加载更多

分布式项目(五)iot-pgsql

书接上回,在Mapping server中,我们已经把数据都整理好了,现在利用postgresql存储历史数据。 iot-pgsql 构建iot-pgsql模块,这里我们写数据库为了性能考虑不在使用mybatis,换成spring jd...

lelinked
今天
2
0
一文分析java基础面试题中易出错考点

前言 这篇文章主要针对的是笔试题中出现的通过查看代码执行结果选择正确答案题材。 正式进入题目内容: 1、(单选题)下面代码的输出结果是什么? public class Base { private Strin...

一看就喷亏的小猿
今天
1
0
cocoapods 用法

cocoapods install pod install 更新本地已经install的仓库 更新所有的仓库 pod update --verbose --no-repo-update 更新制定的仓库 pod update ** --verbose --no-repo-update...

HOrange
今天
3
0
linux下socket编程实现一个服务器连接多个客户端

使用socekt通信一般步骤 1)服务器端:socker()建立套接字,绑定(bind)并监听(listen),用accept()等待客户端连接。 2)客户端:socker()建立套接字,连接(connect)服务器,连接上后...

shzwork
昨天
3
0
android自定义viewgroup画背景

设计部要求背景实现一个背景边框带圆弧的效果: 所以想着用自定义控件画一个背景。 为了方便,继承的是LinearLayout,在onMeasure中先获取控件宽高: @Overrideprotected void onMeasure(in...

醉雨
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部