2016-08-15:从YUV420P中提取指定大小区域
typedef struct
{
int width;
int height;
}SizeInfo; typedef struct
{
int x;
int y;
int width;
int height;
}ImageRect; /*************************************************
// Method : ExtraceSpecifiedSizeYuv
// Author : zhoulee
// Date : 2016/08/15 16:14
// Description: 从YUV420P中获取指定大小的YUV420P图像
// Returns : bool: true 获取成功; false 获取失败
// Parameter :
// image: 原始YUV420P数据指针
// imgSize: 原始图像尺寸, 图像宽高必须为偶数
// rect: 指定的区域信息, 区域左上角坐标以及宽高必须为偶数
// partionImg: 指定区域的YUV420P数据
*************************************************/
bool ExtraceSpecifiedSizeYuv(const unsigned char* image, const SizeInfo& imgSize,
const ImageRect& rect, unsigned char* partionImg); bool ExtraceSpecifiedSizeYuv(const unsigned char* image, const SizeInfo& imgSize,
const ImageRect& rect, unsigned char* partionImg)
{
if(imgSize.width%2 != 0 || imgSize.height%2 != 0
|| rect.x%2 != 0 || rect.y%2 != 0
|| rect.width%2 != 0 || rect.height%2 != 0
|| rect.x + rect.width > imgSize.width
|| rect.y + rect.height > imgSize.height)
{
return false;
} int yBegPos = 0;
int uBegPos = imgSize.width * imgSize.height;
int vBegPos = uBegPos + (imgSize.width * imgSize.height) / 4; int offset = 0;
//y component
for(int row = rect.y; row < rect.y + rect.height; ++row)
{
int yOffset = yBegPos + row * imgSize.width + rect.x;
memcpy(partionImg + offset, image + yOffset, rect.width);
offset += rect.width;
} //u component
for (int row = rect.y; row < rect.y + rect.height; row+=2)
{
//for (int col = rect.x; col < rect.x + rect.width; col+=2)
//{
// int uOffset = row * imgSize.width / 4 + col / 2;
// partionImg[offset] = image[uBegPos + uOffset];
// ++offset;
//}
int uOffset = uBegPos + row * imgSize.width / 4 + rect.x / 2;
memcpy(partionImg + offset, image + uOffset, rect.width / 2);
offset += rect.width / 2;
} //v component
for (int row = rect.y; row < rect.y + rect.height; row+=2)
{
//for (int col = rect.x; col < rect.x + rect.width; col+=2)
//{
// int vOffset = row * imgSize.width / 4 + col / 2;
// partionImg[offset] = image[vBegPos + vOffset];
// ++offset;
//}
int vOffset = vBegPos + row * imgSize.width / 4 + rect.x / 2;
memcpy(partionImg + offset, image + vOffset, rect.width / 2);
offset += rect.width / 2;
} return true;
}
2016-08-15:从YUV420P中提取指定大小区域的更多相关文章
- 2016.8.15上午纪中初中部NOIP普及组比赛
2016.8.15上午纪中初中部NOIP普及组比赛 链接:https://jzoj.net/junior/#contest/home/1333 这次比赛不怎么好,因为这套题目我并不是很擅长. 可同学们 ...
- Delphi中建立指定大小字体和读取该字体点阵信息的函数(转)
源:Delphi中建立指定大小字体和读取该字体点阵信息的函数 Delphi中建立指定大小字体和读取该字体点阵信息的函数 作者:Thermometer Email: webmaster@daheng- ...
- 截取UIImage指定大小区域
截取UIImage指定大小区域 最近遇到这样的需求:从服务器获取到一张照片,只需要显示他的左半部分,或者中间部分等等.也就是截取UIImage指定大小区域. UIImage扩展 我的解决方案是对UII ...
- C# 从字符串中提取指定字符类型的内容
从一段字符串中,提取中文.英文.数字 中文字符30Margin中文字符40HorizontalAlignment 正则表达式: /// <summary> /// 英文字母与数字 /// ...
- 答疑记录:jmeter从返回的html中提取指定内容
返回的html(截取部分),要求从中提取:2022-02-22 13:46:15 <!-- 前面省略557行 --> <td>2022-02-22</td> < ...
- python从字符串中提取指定的内容
有如下字符串: text=cssPath:"http://imgcache.qq.com/ptlogin/v4/style/32",sig:"OvL7F1OQEojtPk ...
- 从.o文件中提取指定开头依赖于外部接口的脚本
nm -g audio_la-audio.o | grep " U " | awk '{ print $2}' | grep "^gst_"
- linux脚本学习之路-在suse10环境中生存指定大小指定文件名的压缩文件
#!/bin/bash#-------------------------------------------------------------------------------# Name: ...
- python 提取字符串中的指定字符 正则表达式
例1: 字符串: '湖南省长沙市岳麓区麓山南路麓山门' 提取:湖南,长沙 在不用正则表达式的情况下: address = '湖南省长沙市岳麓区麓山南路麓山门' address1 = address.s ...
随机推荐
- Mysql从客户端连接服务器连不上的问题
Mysql从客户端连接服务器连不上的问题 公司要用Mysql做一个测试,开始在自己的本地建一个Mysql数据库自己本地的程序再连上去,没有遇到过连接不上的问题.这次数据库在服务器上,从本地客户端连 ...
- jsonp 实现sso
这几天用jsop实现了公司的sso. 这里面最重要的是对cookie的理解. cookie 就是一个网站存于本地的数据,zai下次请求同一个网站时,发送给服务器,服务器端可以进行AUD操作,这种操作后 ...
- 为什么在保护模式下IA-32处理器最高可访问4GB的内存
在保护模式下,IA-32处理器可访问最高达4GB的内存,这是32位无符号二进制整数地址能够寻址的上限. 今天看汇编的时候发现书里带过一句,不太明白为什么内存上限是4GB,就搜了一下,总结了一下答案. ...
- 新策略构思 dual thrust
根据dual truest的策略,因为是针对日线级别的.同理我们可以根据60分钟级别开发出一套策略,等有时间写在下面
- BZOJ 1500 Splay 全操作
好久没写splay了,写一发(写了一节课,调了一节课) #include <iostream> #include <cstring> #include <cstdio&g ...
- Sublime Text 3开启自动换行
在Submine Text 3中要开启自动换行功能只需要两个步骤: 1.找到查看(View) 2.点击弹出菜单中的自动换行即可 但是如果是在2中的话就相对麻烦少少,现在也说下其开启自动换行功能的步骤: ...
- Thrift 个人实战--Thrift RPC服务框架日志的优化
前言: Thrift作为Facebook开源的RPC框架, 通过IDL中间语言, 并借助代码生成引擎生成各种主流语言的rpc框架服务端/客户端代码. 不过Thrift的实现, 简单使用离实际生产环境还 ...
- POJ 3067 Japan(树状数组)
Japan Time Limit: 10 ...
- 抓包工具PowerSniff-0.1
做这个程序的意图是wireshark插件编写复杂(虽然也支持lua),而轻量级的工具如smartsniff,minisniff不支持插件化数据分析,各种工具用下来或多或少不顺手.以前写的外挂也都是手工 ...
- VB6对象与地址相互转换
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _ (lpDest As ...