首页 > 其他分享 >.PNG读写与图像缩放入门

.PNG读写与图像缩放入门

时间:2023-01-08 11:45:45浏览次数:62  
标签:get int big 读写 small PNG libpng 放入 png

小图片: IfranView:   

IrfanView是免费软件但不开源。下面的程序读入small.png,用最简单的方法放大,然后写入big.png:

/* 
https://www.nongnu.org/pngpp/ 在libpng上包了C++接口,用起来很方便。
安装与查看libpng++-dev
# apt-get install libpng++-dev
# dpkg -l | grep libpng
...
# dpkg -L libpng++-dev
/usr/include/png++ ...
# dpkg -L libpng-dev
/usr/include/libpng16
/usr/lib/x86_64-linux-gnu/libpng.a  ...
$ libpng-config --ldflags --cflags
-lpng16 -I/usr/include/libpng16
16是版本号
*/
#include <png++/image.hpp> // g++ 1.cpp -lpng16
using namespace png;
#define RGB rgb_pixel
#define ratio 3.14
int main() {
  image<RGB> small("small.png"); // 打开文件失败会throw
  const pixel_buffer<RGB>& s = small.get_pixbuf();
  int w = small.get_width(), h = small.get_height();
  int ww = int(ratio * w + 0.5), hh = (ratio * h + 0.5);
  image<RGB> big(ww, hh);
  pixel_buffer<RGB>& b = big.get_pixbuf();
  b[0][0] = RGB(255, 128, 0); // 试一下
  for (int yy = 0; yy < hh; yy++) {
    for (int xx = 0; xx < ww; xx++) {
      int x = int(xx / ratio + 0.5), y = int(yy / ratio + 0.5);
      if (x >= w) x = w - 1; if (y >= h) y = h - 1;
      b[yy][xx] = s[y][x];
    }
  }
  big.write("big.png");
}

效果: 重复IfranView:

lanczos · GitHub Topics | Lanczos resampling - Detailed Pedia

双线性插值 | Bilinear interpolation - Detailed Pedia

Source Code for Smooth Image Resampling [fairly-well-optimized, MMX加普通版, MMX LOOP - about 32% faster]

Plain C Resampling DLL - CodeProject

标签:get,int,big,读写,small,PNG,libpng,放入,png
From: https://www.cnblogs.com/funwithwords/p/17034329.html

相关文章

  • VFP读写MifareOne IC卡 M1卡
    本示例使用读写器介绍:AndroidLinuxRFID读写器NFC发卡器WEB可编程NDEF文本/智能海报 声明函数:declareintegerpcdbeepinOUR_MIFARE.dllintegerxmsdeclareintegerp......
  • VFP读写NFC标签Ntag卡
    本示例使用的读写器:AndroidLinuxRFID读写器NFC发卡器WEB可编程NDEF文本/智能海报声明函数:setproctofunprogramdeclareintegerpcdbeepinOUR_MIFARE.dllintegerxms......
  • 简单文件的读写
    1.背景2023-01-07最近学习了文件流操作,简单记录一下2.用途百度百科:用来进行输入输出操作的流就称为IO流。换句话说,IO流就是以流的方式进行输入输出。说人话就是......
  • 搭建MyCat2双主双从的MySQL读写分离
    一、MySQL双主双从一个主机m1用于处理所有写请求,它的从机s1和另一台主机m2还有它的从机s2负责所有读请求。当m1主机宕机后,m2主机负责写请求,m1、m2互为备机。......
  • upload.html:143 GET http://localhost:8080/user_image/85F250A6-E07D-4FCB-8092-D4A
    publicclassLoginInterceptorConfigureimplementsWebMvcConfigurer{@OverridepublicvoidaddResourceHandlers(ResourceHandlerRegistryregistry){......
  • Qt 读写txt文本文件
    打开文件时,使用参数选择打开文件模式需要导入QFile和qDebug、QString头文件写入覆盖写入1QFilef("D:\\qtManager.txt");2if(!f.open(QIODevice::WriteOnly|QIO......
  • Flink Spark jdbc读写数据库导致oom和提升性能解决办法
     fetchsize=Integer.MIN_VALUE 作用如果不设置上述值,默认读取jdbc数据时,会默认获取所有的行到resultset中,数据量大会导致oom和占用大量内存reWriteBatchedInserts=t......
  • Mysql读写分离
    MySQL主从复制介绍:MySQL主从复制是一个异步的复制过程,底层是基于Mysql数据库自带的二进制日志功能。就是一台或多台MySOL数据库(slave,即从库)从另一台MySOL数据库(master......
  • Python读写文件之换行符
    系统的换行符和路径分隔符 os模块可以获取当前系统的换行符和路径分隔符 windows操作系统>>>os.linesep                        '\r\n......
  • js 电子签名涂鸦,且支持转为png图片
    背景:有个业务需要用户签署一个承诺书,电子签名,并生成图片,所以就看了一些线上签名且生成图片的技术和插件,并自己研究了一下。1. elesigncode 第三方插件首先在github看到......