关于C语言的图像光标处理

关于C语言的图像光标处理

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <iostream>
#include "matrix_mul.h"


int main()
{
	int  W = 640;
	int  H = 512;

	int  cen_x = 80;
	int  cen_y = 28;

	int x_up   = W - (W / 4);
	int y_up   = H / 4;
	int x_down = W - (W / 4);
	int y_down = H - (H / 4);
	int x_loction;
	int y_loction;

	int  cen_x_0 = cen_x - 1;
	int  cen_y_0 = cen_y - 1;


	U08 *datain;
	datain = (U08 *)malloc(W * H * sizeof(U08));

	U08 *dataout;
	dataout = (U08 *)malloc(W * H * sizeof(U08));

	U08 *dout;
	dout = (U08 *)malloc(W * H * sizeof(U08));
	
	//产生图像
	for (int i = 0; i < H; i++)
	{
		for (int j = 0; j < W; j++)
		{
			datain[i*W + j] = rand();
		}
	}

	//判断显示区域
	if ((cen_x >= x_up) && (cen_x < (x_up + 48)) && (cen_y >= y_up) && cen_y < (y_up + 48))
	{
		x_loction = x_down;
		y_loction = y_down;
	}
	else
	{
		x_loction = x_up;
		y_loction = y_up;
	}

	//中心
	int  n = cen_y_0 * W + cen_x_0;
	//左边
	int  n_left_1 = cen_y_0 * W + cen_x_0 - 1;
	int  n_left_2 = cen_y_0 * W + cen_x_0 - 2;
	int  n_left_3 = cen_y_0 * W + cen_x_0 - 3;
	int  n_left_4 = cen_y_0 * W + cen_x_0 - 4;
	//右边
	int  n_righ_1 = cen_y_0 * W + cen_x_0 + 1;
	int  n_righ_2 = cen_y_0 * W + cen_x_0 + 2;
	int  n_righ_3 = cen_y_0 * W + cen_x_0 + 3;
	int  n_righ_4 = cen_y_0 * W + cen_x_0 + 4;
	//上边
	int  n_up_1 = (cen_y_0 - 1) * W + cen_x_0;
	int  n_up_2 = (cen_y_0 - 2) * W + cen_x_0;
	int  n_up_3 = (cen_y_0 - 3) * W + cen_x_0;
	int  n_up_4 = (cen_y_0 - 4) * W + cen_x_0;
	//下边
	int  n_down_1 = (cen_y_0 + 1) * W + cen_x_0;
	int  n_down_2 = (cen_y_0 + 2) * W + cen_x_0;
	int  n_down_3 = (cen_y_0 + 3) * W + cen_x_0;
	int  n_down_4 = (cen_y_0 + 4) * W + cen_x_0;

	//存放3×3的像素
	//0
	if((cen_y == 1) || (cen_x == 1))
		arry3_3[0] = val;
	else 
		arry3_3[0] = datain[n_up_1 - 1];

	//1
	if (cen_y == 1)
		arry3_3[1] = val;
	else
		arry3_3[1] = datain[n_up_1];

	//2
	if ((cen_y == 1) || (cen_x == W))
		arry3_3[2] = val;
	else
		arry3_3[2] = datain[n_up_1 + 1];

	//3
	if (cen_x == 1)
		arry3_3[3] = val;
	else
		arry3_3[3] = datain[n - 1];

	//4
	arry3_3[4] = datain[n];

	//5
	if (cen_x == W)
		arry3_3[5] = val;
	else
		arry3_3[5] = datain[n + 1];

	//6
	if ((cen_y == H) || (cen_x == 1))
		arry3_3[6] = val;
	else
		arry3_3[6] = datain[n_down_1 - 1];

	//7
	if (cen_y == H)
		arry3_3[7] = val;
	else
		arry3_3[7] = datain[n_down_1];

	//8
	if ((cen_y == H) || (cen_x == W))
		arry3_3[8] = val;
	else
		arry3_3[8] = datain[n_down_1 + 1];

	
	U08 arry3_3[9];
	arry3_3[0] = datain[n_up_1 - 1];
	arry3_3[1] = datain[n_up_1];
	arry3_3[2] = datain[n_up_1 + 1];
	arry3_3[3] = datain[n - 1];
	arry3_3[4] = datain[n];
	arry3_3[5] = datain[n + 1];
	arry3_3[6] = datain[n_down_1 - 1];
	arry3_3[7] = datain[n_down_1];
	arry3_3[8] = datain[n_down_1 + 1];



	for (int ii = 0; ii < 9; ii++)
	{
		printf("arry3_3[%d] = %d\n", ii, arry3_3[ii]);
	}

	


	for (int i = 0; i < H; i++)
	{
		for (int j = 0; j < W; j++)
		{
			
			dataout[i*W + j] = datain[i*W + j];

			for (int ii = 0; ii < 3; ii++)
			{
				for (int jj = 0; jj < 3; jj++)
				{

					if ((j >= (x_loction + 16 * jj)) && (j < (x_loction + 16 * (jj + 1))) &&
						(i >= (y_loction + 16 * ii)) && (i < (y_loction + 16 * (ii + 1))))
					{
						dataout[i*W + j] = arry3_3[ii * 3 + jj];
						//printf("dataout[%d] = %d\n", i*W + j, dataout[i*W + j]);
					}	
				}
			}

			

		}
	}


	//printf("128*W + 160 = %d\n", 128*W + 160);
	

	free(datain);

	for (int i = 0; i < H; i++)
	{
		for (int j = 0; j < W; j++)
		{
				if (((i*W + j) == n       ) ||
					((i*W + j) == n_left_1) || 
					((i*W + j) == n_left_2) ||
					((i*W + j) == n_left_3) ||
					((i*W + j) == n_left_4) ||
					((i*W + j) == n_righ_1) ||
					((i*W + j) == n_righ_2) ||
					((i*W + j) == n_righ_3) ||
					((i*W + j) == n_righ_4) ||
					((i*W + j) == n_up_1)   ||
					((i*W + j) == n_up_2)   ||
					((i*W + j) == n_up_3)   ||
					((i*W + j) == n_up_4)   ||
					((i*W + j) == n_down_1) ||
					((i*W + j) == n_down_2) ||
					((i*W + j) == n_down_3) ||
					((i*W + j) == n_down_4) )
			{
				if(dataout[i*W + j] > 65)
					dout[i*W + j] = 0;
				else
					dout[i*W + j] = 255;
			}
			
			else
			{
				dout[i*W + j] = dataout[i*W + j];
			}

		}
	}

	printf("n        = %d\n", dout[n]);
	printf("n_left_1 = %d\n", dout[n_left_1]);
	printf("n_left_2 = %d\n", dout[n_left_2]);
	printf("n_left_3 = %d\n", dout[n_left_3]);
	printf("n_left_4 = %d\n", dout[n_left_4]);

	printf("n_righ_1 = %d\n", dout[n_righ_1]);
	printf("n_righ_2 = %d\n", dout[n_righ_2]);
	printf("n_righ_3 = %d\n", dout[n_righ_3]);
	printf("n_righ_4 = %d\n", dout[n_righ_4]);

	printf("n_up_1   = %d\n", dout[n_up_1]);
	printf("n_up_2   = %d\n", dout[n_up_2]);
	printf("n_up_3   = %d\n", dout[n_up_3]);
	printf("n_up_4   = %d\n", dout[n_up_4]);

	printf("n_down_1 = %d\n", dout[n_down_1]);
	printf("n_down_2 = %d\n", dout[n_down_2]);
	printf("n_down_3 = %d\n", dout[n_down_3]);
	printf("n_down_4 = %d\n", dout[n_down_4]);

	//显示区域右下方
	/*printf("dataout[384][480] = %d\n", dout[384 * W + 480]);
	printf("dataout[384][480] = %d\n", dout[384 * W + 480 + 1]);
	printf("dataout[384][480] = %d\n", dout[384 * W + 480 + 16]);*/

	//显示区域右上
	printf("dataout[128][480] = %d\n", dout[128 * W + 480]);
	printf("dataout[128][480] = %d\n", dout[128 * W + 480 + 1]);
	printf("dataout[128][480] = %d\n", dout[128 * W + 480 + 16]);

	


	/*
	free(dataout);*/

	
	_getch();
	return 0;
}


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值