近邻取样插值原理:

对于缩放后图片中的某点 (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图片数据的更多相关文章

  1. jQuery实现等比例缩放大图片

      在布局页面时,有时会遇到大图片将页面容器“撑破”的情况,尤其是加载外链图片(通常是通过采集的外站的图片).那么本文将为您讲述使用jQuery如何按比例缩放大图片,让大图片自适应页面布局. 通常我们 ...

  2. 使用LeNet训练自己的手写图片数据

    一.前言 本文主要尝试将自己的数据集制作成lmdb格式,送进lenet作训练和测试,参考了http://blog.csdn.net/liuweizj12/article/details/5214974 ...

  3. Caffe初试(三)使用caffe的cifar10网络模型训练自己的图片数据

    由于我涉及一个车牌识别系统的项目,计划使用深度学习库caffe对车牌字符进行识别.刚开始接触caffe,打算先将示例中的每个网络模型都拿出来用用,当然这样暴力的使用是不会有好结果的- -||| ,所以 ...

  4. Magnifier.js - 支持鼠标滚轮缩放的图片放大镜效果

    Magnifier.js 是一个 JavaScript 库,能够帮助你在图像上实现放大镜效果,支持使用鼠标滚轮放大/缩小功能.放大的图像可以显示在镜头本身或它的外部容器中.Magnifier.js 使 ...

  5. Android调用相册拍照控件实现系统控件缩放切割图片

    android 下如果做处理图片的软件 可以调用系统的控件 实现缩放切割图片 非常好的效果 今天写了一个demo分享给大家 package cn.m15.test; import java.io.By ...

  6. iOS 中使用Base64编码方式编码图片数据

    最近一个项目要求对图片数据简单加密下,就是那种不能直接看到图片内容就行.于是我使用了base64编码对图片数据进行编码,把图片2进制数据变成了base64的字符串,再把这个字符串保存到server的数 ...

  7. Android实现支持缩放平移图片

    本文主要用到了以下知识点 Matrix GestureDetector 能够捕捉到长按.双击 ScaleGestureDetector 用于检测缩放的手势 自由的缩放 需求:当图片加载时,将图片在屏幕 ...

  8. img src 使用 base64 图片数据

    img src 使用 base64 图片数据 在网页上显示一张图片通常是 <img src="xxx.png" > 或 <img src="www.ur ...

  9. PNG图片数据解析

    PNG是一种非常流行的图片格式,它不仅支持透明效果,而且图片数据经过了压缩处理,所以广泛用于web等应用. PNG的文件格式: PNG文件中的数据,总是以一个固定的8个字节开头: (图片来自http: ...

  10. 批量缩放PNG图片.

    最近需要缩放N多图片, 找遍了互联网也没有找到方便使用的批量缩放工具.. 趁着周末写一个练手.. #include <iostream> #include <vector> # ...

随机推荐

  1. 不妨试试更快更小更灵活Java开发框架Solon

    @ 目录 概述 定义 性能 架构 实战 Solon Web示例 Solon Mybatis-Plus示例 Solon WebSocket示例 Solon Remoting RPC示例 Solon Cl ...

  2. python导包

    我们将完成特定功能的代码块放在一个.py结尾的文件中,这个文件被称为模块.在这个模块中可能包含变量,函数,类等等内容. 当我们从外部需要用到这个模块时,就需要将这个模块导入到我们当前环境.导入方式有以 ...

  3. 初识vue3.0

    vue3.0 源码组织方式的变化 采用ts重写 独立的功能模块提取到单独的包中 90%的api兼容Vue2.x Composition API 组合api 解决vue2.x options api 开 ...

  4. centos7离线安装PHP7

    环境 centos7.9 PHP7.4.30 准备工作 在编译PHP时会提示一些包版本不够或者缺少某些包,一般选择yum来安装缺少的包,但因为是离线安装,所以可以手动配置本地yum源.先看一下系统版本 ...

  5. day12-Servlet02

    Servlet02 6.GET和POST请求的分发处理 开发Servlet,通常编写doGet,doPost方法.来对表单的get和post请求进行分发处理 例子 在web文件夹下面创建一个html页 ...

  6. EBI、DDD及其演变架构史

    一.引子 聊架构总离不开"领域驱动架构",大多能聊到DDD(Domain-Driven Design),实际上早期思想EBI架构 1992年就诞生了.核心价值点在于:关注核心业务领 ...

  7. tomcat下载安装&配置教程

    tomcat下载安装&配置教程 1 安装jdk 1.1 安装jdk 1.2 安装JDK后设置环境变量 1.3 使环境变量生效 1.4 查看java版本 2 安装tomcat 2.1 在/usr ...

  8. <七>深入理解new和delete的原理

    new ,delete 运算符 int *p =new int; delete p; 看一下汇编代码 可以看到new 和delete 运算符其实也是 operator运算符重载函数的调用 malloc ...

  9. DevExpress中GridControl控件焦点改变时触发事件

    FocusedRowObjectChanged 事件.可以在焦点改变一行的时候触发对应的事件. 做一个记录 大家如果有问题可以 Console.WriteLine("加群"+&qu ...

  10. Solon v1.11.0 发布,Hello Java

    一个更现代感的 Java 应用开发框架:更快.更小.更自由.没有 Spring,没有 Servlet,没有 JavaEE:独立的轻量生态.主框架仅 0.1 MB. @Controller public ...