#include<stdio.h>
//#include"swap.h"
#include<easyx.h>
//getpixel(x,y);//获取坐标位X和Y的像素点
//putpixel(x,y,color)//输出像素点
/*
图片?像素点?
像素点的本质是什么?颜色
存放在计算机里面,二进制 颜色在内存当中
4Byte 32位
00000000 00000000 00000000 00000000
a b g r //正确
alpha red green blue //错误
透明度 红 绿 蓝
*/
int main()
{
//char filename[20] = { 0 };
//printf("请输入图片名:");
//scanf_s("%s", filename,10);
IMAGE img;
//loadimage(&img, filename);//把图片保存在img中
loadimage(&img, "1.jpg");
int width=img.getwidth();
int height=img.getheight();
initgraph(width, height);
putimage(0, 0, &img);
//主题:马赛克
int size = 10;//一个晓方格的宽度
int redsum;//一个格子里面每一个像素点的红色总和
int greensum;
int bluesum;
int count;//一个格子中像素点的个数,剩下的一些边边
int color;
//遍历每一个小格子,x,y每个格子左上角坐标
for (int y = 0; y < height; y += size)
{
for (int x = 0; x < width; x+=size)
{
//将数据清零
redsum = greensum = bluesum = count = 0;
//循环遍历小格子里的像素点
for (int gy = y; gy < min(y+size,height); gy++)
{
for (int gx = x; gx < min(x+size,width); gx++)
{
int color = getpixel(gx, gy);//获取像素点 32位的数据
redsum += color & 0xff;
greensum += (color >> 8) & 0xff;
bluesum+= (color >> 16) & 0xff;
count++;
}
}//循环结束 小格子里面 数据全部统计完成
redsum = redsum / count;
greensum = greensum / count;
bluesum = bluesum / count;
color = (bluesum << 16) + (greensum << 8) + redsum;
for (int gy = y; gy < min(y + size, height); gy++)
{
for (int gx = x; gx < min(x + size, width); gx++)
{
putpixel(gx, gy, color);
}
}
}
}
for (int y = 0; y < height; y++)
{
for (int x = 0; x < width; x++)
{
int color = getpixel(x, y);//获取到每一个像素点
//color = 0;//图片变成黑色的了
//color = 0xffff01;//图片变成蓝色的了
//color: 00000000 10010010 11101101 10101100
// 00000000 00000000 00000000 11111111 &
//----------------------------------------------------
// 10101100
//color: 00000000 00000000 10010010 11101101
// 00000000 00000000 00000000 11111111 &
// ----------------------------------------------------
// 10101100
int blue = (color >> 16) & 0xff;
int green = (color >> 8) & 0xff;
int red=color&0xff;//10101100
//red = 0;//关掉红色通道
//green = 0;//关掉红色通道
//黑白:原理 (200+100+30)/3
int rgb = (red + green + blue) / 3;
//反色
//rgb = 255 - rgb;
color = (rgb << 16) + (rgb << 8) + rgb;
//color = (blue << 16) + (green << 8) + red;
putpixel(x, y, color);//像素点输出
}
}
//system("pause");
while (1);
return 0;
}