简单图像居中计算起始点

该博客介绍了如何在C语言和C++中计算单个图像在屏幕的居中位置,以及在画布上居中显示的方法。程序考虑了画布和图像的大小,将它们划分为多个块,并计算了画布在屏幕上的位置以及图像在画布中的起始位置。此外,还讨论了处理多个相同大小图像居中显示的场景。
摘要由CSDN通过智能技术生成

1.单个图像居中计算在屏幕的起始点(C语言)

#include <stdio.h>
#include <stdlib.h>

struct size
{
    int width;
    int high;
};

struct point
{
    int x;
    int y;
};

void ImageCenterCalculation(struct size *ScreenSize, struct size *ImageSize, struct point *coordinate)
{
    coordinate->x = (ScreenSize->width-ImageSize->width)/2;
    coordinate->y = (ScreenSize->high-ImageSize->high)/2;
}

int main()
{
    printf("Hello\n");
    struct size ScreenSize, ImageSize;
    struct point coordinate ;
    printf("请输入屏的宽和高:");
    scanf("%d %d", &ScreenSize.width, &ScreenSize.high);
    printf("请输入图像的宽和高:");
    scanf("%d %d", &ImageSize.width, &ImageSize.high);
    //printf("%d\r%d\r%d\r%d\n", ScreenSize.high, ScreenSize.width, ImageSize.high, ImageSize.width);
    ImageCenterCalculation(&ScreenSize,&ImageSize,&coordinate);
    printf("图像居中起始点(%d,%d)\n", coordinate.x, coordinate.y);

    return 0;
}

2.添加画布,以及把画布和图像分割为多个块
屏幕,画布,图片,块的概念图

示例中屏幕是黑色外框,宽为150像素,高为100像素
画布是蓝色框,宽为120像素,高为80像素
图片是品红色框,宽为36像素,高为48像素
块是红色框,宽为12像素,高为16像素

那么画布的大小可以描述为10个块的宽度,5个块的高度
图片可以描述为3个块的宽度,3个块的高度

需要求的参数是:计算图像居中显示时,画布在屏幕的位置,以及图像在画布的位置
在这里插入图片描述
控制台输出结果
在这里插入图片描述

程序如下(C++)

#include <stdio.h>
#include <stdlib.h>

#include <iostream>
using namespace std;

struct size
{
	int width;
	int high;
};

struct point
{
	int x;
	int y;
};

// 简单计算单个图像在屏幕中的居中起始位置
void ImageCenterCalculation(struct size *ScreenSize, struct size *ImageSize, struct point *coordinate)
{
	coordinate->x = (ScreenSize->width - ImageSize->width) / 2;
	coordinate->y = (ScreenSize->high - ImageSize->high) / 2;
}

// 画布按一定尺寸划分成N个方块,因此画布的大小是按块的算,图像也是按块算,也就是画布和图像是由N个块组成
// 然后计算画布在屏幕的起始点位置(像素单位),以及单个图像在画布中的居中起始方块位置,计算结果是第m行第n列方块
void ImageCenterCalculation2(struct size *ScreenSize, struct size *BlockSize, struct size *ImageSize, struct size *CanvasSize, struct point *CanvasLocation, struct point *coordinate)
{
	// BlockSize表示一个块大小,这里的画布和图像是由N个方块组成
	int CanvasWidth, CanvasHigh, ErrorReturn=0;
	CanvasWidth = BlockSize->width * CanvasSize->width;
	CanvasHigh= BlockSize->high * CanvasSize->high;

	// 判断画布是否超过屏幕大小,图像是否超过画布大小
	if (CanvasWidth > ScreenSize->width)
	{
		printf("画布宽度超出屏幕宽度\n");
		ErrorReturn = 1;
	}
	if (CanvasHigh > ScreenSize->high)
	{
		printf("画布高度超出屏幕高度\n");
		ErrorReturn = 1;
	}
	if (ImageSize->width > CanvasSize->width)
	{
		printf("图像宽度超出画布宽度\n");
		ErrorReturn = 1;
	}
	if (ImageSize->high > CanvasSize->high)
	{
		printf("图像高度超出画布高度\n");
		ErrorReturn = 1;
	}
	if (ErrorReturn) { return ; }

	// 计算画布起始点位置
	CanvasLocation->x = (ScreenSize->width - CanvasWidth) / 2;
	CanvasLocation->y = (ScreenSize->high - CanvasHigh) / 2;
	printf("画布位置起始点(%d,%d)\n", CanvasLocation->x, CanvasLocation->y);

	// 计算图像起始块位置
	coordinate->x = (CanvasSize->width - ImageSize->width) / 2;
	coordinate->y = (CanvasSize->high - ImageSize->high) / 2;
	printf("图像居中起始点(%d,%d)\n", coordinate->x, coordinate->y);
}

int main()
{
	printf("Hello\n");
	struct size ScreenSize, ImageSize, BlockSize, CanvasSize;
	struct point CanvasLocation,coordinate;

	printf("请输入屏的宽和高:");
	cin >> ScreenSize.width >> ScreenSize.high ;

	printf("请输入块的宽和高:");
	cin >> BlockSize.width >> BlockSize.high;

	printf("请输入图像的宽和高(块):");
	cin >> ImageSize.width >> ImageSize.high;

	printf("请输入画布的宽和高(块):");
	cin >> CanvasSize.width >> CanvasSize.high;

	ImageCenterCalculation2(&ScreenSize, &BlockSize, &ImageSize, &CanvasSize, &CanvasLocation, &coordinate);
	return 0;
}

3.计算多个相同大小的图像居中显示的位置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值