关于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;
}