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.计算多个相同大小的图像居中显示的位置