my_mosaic
//功能:输入想要打马赛克的坐标点,宽,高以及每个边需要划分的块数进行打马赛克
//只能处理位图,根据不同色深定义depth即可
//还没写从文件头读取图片分辨率
#include<unistd.h>
#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#define depth 4
static int mask(char(*pic)[600*depth],
const int x,const int y,const int w,const int h){
int i=0,j=0,q=0;
//存储色块的颜色
char color_std[depth];
for(q=0;q<depth;q++){
color_std[q]=pic[y][depth*x+q];
}
for(j=y;j<y+h;j++){
for(i=depth*x;i<depth*x+w*depth;i+=depth){
for(q=0;q<depth;q++){
pic[j][i+q]=color_std[q];
}
}
}
}
int reg(char* filename,const int x,\
const int y,const int w,const int h,const int num){
int fd=open(filename,O_RDWR);
lseek(fd,54,SEEK_SET);
int i=0,j=0,q=0,p=0;
char pic[450][600*depth];
read(fd,pic,sizeof(pic));
//计算需要画图的点和区域
for(j=y;j<y+h-1;j+=h/num){
for(i=x;i<x+w-1;i+=(w/num)) {
mask(pic,i,j,w/num,h/num);
}
}
lseek(fd,54,SEEK_SET);
write(fd,pic,sizeof(pic));
close(fd);
}
int main(int argc, const char *argv[])
{
int x=atoi(argv[1]);
int y=atoi(argv[2]);
int w=atoi(argv[3]);
int h=atoi(argv[4]);
int n=atoi(argv[5]);
reg("./image",/*W,H,*/x,y,w,h,n);
return 0;
}
my_mosaic的更多相关文章
随机推荐
- 用php模拟做服务端侦听端口
参考:http://www.cnblogs.com/thinksasa/archive/2013/02/26/2934206.html http://blog.csdn.net/alongken200 ...
- ubuntu 14.04 解决JavaMelody 图片中文乱码
从windows系统中,copy了MSYH.TTC和MSYHBD.TTC 2个文件到 服务器的%JAVA_HOME%\jre\lib\fonts\fallback 目录中, (如果fallback目录 ...
- JavaScript学习(2):对象、集合以及错误处理
在这篇文章里,我们讨论一下JavaScript中的对象.数组以及错误处理. 1. 对象 对象是JavaScript中的一种基本类型,它内部包含一些属性,我们可以对这些属性进行增删操作. 1.1 属性 ...
- CSS3文本温故
1.CSS早期属性,分为三大类:字体.颜色和文本: 2.CSS文本类型有11个属性: 注:还有一个颜色属性:color,主要用来设置文本颜色 3.CSS3文本阴影属性:text-shadow语法:te ...
- JavaScript学习笔记-函数实例
函数实例 var p = { a:15, b:'5', f1:function(){ var self = this; console.log(self.a+self.b); f2(); functi ...
- 10本Java经典书目推荐
本文列出的10本书是我个人非常喜欢的Java书籍,当我有时间的时候,我就会将它们捧在手里阅读.甚至有些书我反复读过很多遍,每次重新读的时候总会有新的收获.因此这些书也是大部分Java程序员喜欢的书籍. ...
- 浏览器判断是否安装APP
浏览器判断是否安装APP http://blog.csdn.net/henrywulibin/article/details/52087041 从浏览器中打开我们的应用 http://blog.csd ...
- UITableView增加和删除、移动
复习一下: 1.在控制器上添加一个UITableView, 暂时该UITableView控件变量名命名为为tableView, 设置控件代理,实现控制器的UITableViewDataSource, ...
- NSNotificationCenter应用总结
通常我们在 iOS 中发生什么事件时该做什么是由 Delegate 实现的,例如 View 加载完后会触发 viewDidLoad. Apple 还为我们提供了另一种通知响应方式,那就是 NSNot ...
- Android消息机制入门
接着处理<Android 网络图片查看器>中出现的问题 使用添加子线程,修改原程序: package com.wuyudong.imagesviewer; import java.io.I ...