近邻取样插值方法缩放BGRA图片数据
近邻取样插值原理:

对于缩放后图片中的某点 (Dx, Dy) 对应于原图片中的点 (Sx, Sy),它们之间存在如下的比例关系:
(Sx-0)/(SW-0)=(Dx-0)/(DW-0)
(Sy-0)/(SH-0)=(Dy-0)/(DH-0)
因此,已知缩放后图片中的任意一点 (Dx, Dy),可以求得其对应的原图片中的点Sx=Dx*SW/DW,Sy=Dy*SH/DH。
注意:本程序缩放的是BGRA 4字节数据,如字节数不同需按实际情况进行修改。
/*
*@brief 按大小进行内存拷贝
*@param v_dst:目的地址;v_src 源地址; c要拷贝的字符数量
*@return 目标数据最后地址.
*/
void * my_memcpy(void *v_dst, const void *v_src, u8 c)
{
const char *src = v_src;
char *dst = v_dst;
while(c--)
{
*dst++ = *src++;
}
return v_dst;
} /*
*@brief 近邻取样插值方法缩放BGRA图片数据
*@param srcPixelDatas:源数据地址 ,srcPic_width:源数据宽度,srcPic_height:源数据高度
*@param dstPixelDatas:转换后的数据存储地址 ,dstPic_width:目的数据宽度,dstPic_height:目的数据高度
*@return 成功0,失败-1.
*/
static int PicZoom(u8 *srcPixelDatas, u32 srcPic_width, u32 srcPic_height,
u8 *dstPixelDatas, u32 dstPic_width, u32 dstPic_height)
{
u32 src_lineBytes = srcPic_width * 4; /*一行的字节数*/
u32 picZoom_lineBytes = dstPic_width * 4;
unsigned long dwDstWidth = dstPic_width;
unsigned long * pdwSrcXTable;
unsigned long x;
unsigned long y;
unsigned long dwSrcY;
u8 *pucDest;
u8 * pucSrc;
unsigned long dwPixelBytes = 4; /*像素字节数*/ pdwSrcXTable = malloc(sizeof(unsigned long)* dwDstWidth);
if(NULL == pdwSrcXTable)
{
return - 1;
}
for(x = 0; x < dwDstWidth; x++) /*生成表*/
{
pdwSrcXTable[x] = (x *srcPic_width / dstPic_width);
} for(y = 0;y < dstPic_height;y++)
{
dwSrcY = (y * srcPic_height / dstPic_height);
pucDest = dstPixelDatas + y *picZoom_lineBytes;
pucSrc = srcPixelDatas + dwSrcY *src_lineBytes;
for(x = 0;x < dwDstWidth; x++)
{
my_memcpy(pucDest + x *dwPixelBytes, pucSrc + pdwSrcXTable[x] *dwPixelBytes, dwPixelBytes);
}
}
free(pdwSrcXTable);
return 0;
}
参考资料:
RGB源数据操作: 实现图片放大、缩小_DS小龙哥的博客-CSDN博客_rgb图像放大
图像缩放算法-lantianyu520-ChinaUnix博客
近邻取样插值方法缩放BGRA图片数据的更多相关文章
- jQuery实现等比例缩放大图片
在布局页面时,有时会遇到大图片将页面容器“撑破”的情况,尤其是加载外链图片(通常是通过采集的外站的图片).那么本文将为您讲述使用jQuery如何按比例缩放大图片,让大图片自适应页面布局. 通常我们 ...
- 使用LeNet训练自己的手写图片数据
一.前言 本文主要尝试将自己的数据集制作成lmdb格式,送进lenet作训练和测试,参考了http://blog.csdn.net/liuweizj12/article/details/5214974 ...
- Caffe初试(三)使用caffe的cifar10网络模型训练自己的图片数据
由于我涉及一个车牌识别系统的项目,计划使用深度学习库caffe对车牌字符进行识别.刚开始接触caffe,打算先将示例中的每个网络模型都拿出来用用,当然这样暴力的使用是不会有好结果的- -||| ,所以 ...
- Magnifier.js - 支持鼠标滚轮缩放的图片放大镜效果
Magnifier.js 是一个 JavaScript 库,能够帮助你在图像上实现放大镜效果,支持使用鼠标滚轮放大/缩小功能.放大的图像可以显示在镜头本身或它的外部容器中.Magnifier.js 使 ...
- Android调用相册拍照控件实现系统控件缩放切割图片
android 下如果做处理图片的软件 可以调用系统的控件 实现缩放切割图片 非常好的效果 今天写了一个demo分享给大家 package cn.m15.test; import java.io.By ...
- iOS 中使用Base64编码方式编码图片数据
最近一个项目要求对图片数据简单加密下,就是那种不能直接看到图片内容就行.于是我使用了base64编码对图片数据进行编码,把图片2进制数据变成了base64的字符串,再把这个字符串保存到server的数 ...
- Android实现支持缩放平移图片
本文主要用到了以下知识点 Matrix GestureDetector 能够捕捉到长按.双击 ScaleGestureDetector 用于检测缩放的手势 自由的缩放 需求:当图片加载时,将图片在屏幕 ...
- img src 使用 base64 图片数据
img src 使用 base64 图片数据 在网页上显示一张图片通常是 <img src="xxx.png" > 或 <img src="www.ur ...
- PNG图片数据解析
PNG是一种非常流行的图片格式,它不仅支持透明效果,而且图片数据经过了压缩处理,所以广泛用于web等应用. PNG的文件格式: PNG文件中的数据,总是以一个固定的8个字节开头: (图片来自http: ...
- 批量缩放PNG图片.
最近需要缩放N多图片, 找遍了互联网也没有找到方便使用的批量缩放工具.. 趁着周末写一个练手.. #include <iostream> #include <vector> # ...
随机推荐
- 测试架构师CAP原理(最简单)
测试架构师CAP原理(最简单) 很多人都不是很了解CAP理论,其实CAP很简单,不要想复杂了! C:一致性,就是数据一致性,就是数据不出错! A:可用性,就是说速度快,不延迟,无论请求成功失败都很快返 ...
- kubelet忽然不可用
原因,有可能机器的cpu信息有变化(扩容或者缩容)解决办法: 删掉/opt/var/lib/kubelet目录下(或者/data/lib/kubelet)cpu_manager_state文件 然后m ...
- 创建外部表步骤及解决ORA-29913:执行ODCIETTABLEOPEN调出时出错
创建外部表步骤 建立目录对象(用sys用户创建.授权) 外部表所在路径一定要写对!!! create directory ext_data as 'D:\ORACLE'; grant read,wri ...
- 研发效能|DevOps 已死平台工程永存带来的焦虑
最近某位大神在推特上发了一个帖子,结果引来了国内众多卖课机构.培训机构的狂欢,开始贩卖焦虑,其实「平台工程」也不是什么特别高深莫测的东西.闲得无聊,把这位大神的几个帖子薅了下来,你看过之后就会觉得没啥 ...
- Codeforces Round #781(C. Tree Infection)
Codeforces Round #781 C. Tree Infection time limit per test 1 second memory limit per test 256 megab ...
- phpmyadmin 数据库导出数据到excel(图文版)
查询到想要的数据后,点击上方或下方的"导出"按钮 格式选择"CSV for MS Excel" 如果快速导出的数据乱码,可以选择"导出方式" ...
- Go语言核心36讲34
我们在上篇文章中讲到了sync.WaitGroup类型:一个可以帮我们实现一对多goroutine协作流程的同步工具. 在使用WaitGroup值的时候,我们最好用"先统一Add,再并发Do ...
- HDLBits答案——Verification: Writing Testbenches
1 clock module top_module ( ); reg clk; dut U1(.clk(clk)); initial begin clk = 0; end always begin # ...
- day18 批量查询与模糊查询 & 聚合函数与内置函数 & distinct关键字 & 分页查询limit & 排序order
day18 两个表student和user student id s_name s_age s_sex user id u_name u_age u_sex 批量插入 insert into stud ...
- 4.7:Hive操作实验
〇.概述 1.拓扑结构 2.目标 通过Hive实验熟悉Hive的基本操作 一.操作流程 1.启动环境 2.启动hive 输入 cd /home/user/bigdata/apache-hive-2.3 ...