lcd图片缩小

void img_small3(const unsigned char *p){
	int y, x,color;
	//压缩1/4。每4个点失去1个,一行也就失去200。
	for(y = 0;y < 360 ;y++)
	{	if(!(y%3))p+=(800*3);//判断屏幕的行,然后跳过颜色的那一行,指向下一行,注意!(y%3)要加括号,要不然先执行!y
		for(x = 0;x < 600; x++)
		{	
			if (x%3)//判断是否到了消去的那个点的颜色值,600/200=3,注意不是%4
			{
				color =(*p<<16)+(*(p+1)<<8)+*(p+2);
				*(fbuf + (800*y + x)) = color;
				p+=3;
			}else{//如果到了颜色值消去的那一点,颜色指针+3跳到下一个值
				// *(fbuf + (800*y + x)) =0xffffff;
				p+=3;
				color =(*p<<16)+(*(p+1)<<8)+*(p+2);
				*(fbuf + (800*y + x)) = color;
				p+=3;
			}
		}//一行剩下的给白色。
		for(x = 600;x < 800; x++)
		{
			*(fbuf + (800*y + x)) =0xffffff; 
		}
	}//剩下的行给白色
	for(y = 360;y < 480 ;y++)
	{	
		for(x = 0;x < 800; x++)
		{	
			*(fbuf + (800*y + x)) =0xffffff;
		}
	}
}

可以函数里传入z参数

void img_small4(const unsigned char *p){
	int y, x,color,a,b,c,z=4;
	// a=480-480/z;b=800-800/z; 
	//在裸机上,用除法会报错,http://blog.chinaunix.net/uid-26833883-id-3282967.html
	//http://blog.csdn.net/yuanlu837/article/details/7958781
	c=z-1;
	for (a = 1; a < 800; a++)
	{
		if (a*z==800)
		{//使用加法和乘法实现除法
			a=800-a;
			break;
		}
	}
	for (b = 1; b < 480; b++)
	{
		if (b*z==480)
		{
			b=480-b;
			break;
		}
	}
	if (789<a||b>479)
	{//防止一些不是整除的,就原画输出,但第一行和列还是会没。
		printf("%d,%d\n",a,b);
		a=800;
		b=480;
		c=1;
	}

	for(y = 0;y < b ;y++)
	{	if(!(y%c))p+=(800*3);
		for(x = 0;x <a; x++)
		{	
			if (x%c)
			{
				color =(*p<<16)+(*(p+1)<<8)+*(p+2);
				*(fbuf + (800*y + x)) = color;
				p+=3;
			}else{
				// *(fbuf + (800*y + x)) =0xffffff;
				p+=3;
				color =(*p<<16)+(*(p+1)<<8)+*(p+2);
				*(fbuf + (800*y + x)) = color;
				p+=3;
			}
		}
		for(x = a;x < 800; x++)
		{
			*(fbuf + (800*y + x)) =0xffffff; 
		}
	}
	for(y =b;y < 480 ;y++)
	{	
		for(x = 0;x < 800; x++)
		{	
			*(fbuf + (800*y + x)) =0xffffff;
		}
	}
}

也可以用加减法实现乘除法

for (a = 0; a < 800; ++a)
	{
		for (i=0; i < c; i++)
		{
			a=a+a;
		}
		if (a==800)
		{
			break;
		}
	}
	for (b = 0; b < 480; ++b)
	{	
		for (i=0; i < c; i++)
		{
			b=b+b;
		}
		if (b==480)
		{
			break;
		}
	}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值