我想要的: image =一个方形位图,宽度=高度 所有图像的大小完全相同
我有一个程序在容器上绘制图像。 在这种情况下,图像是生成的位图。 容器的尺寸是通用的(与表单的客户化大小相同)。
我想要按行和列布置图像。但是绘图部分应该计算给定数量的图像最多适合多少行和多少列,并调整图像大小以使它们适合。
我得到了什么: 用于调整图像所在对象大小的代码
public void ResizeScreen(Size newSize)
{
this.size = newSize;
InitializeObjectSize();
}
调整图片大小的代码
public void InitializeObjectSize()
{
int objectSize;
int spacing = 10;
if ((this.size.Height - 2 * spacing) <= (this.size.Width - ((objects.Count + 1) * spacing)) / objects.Count)
{
objectSize = this.size.Height - (2 * spacing);
}
else
{
objectSize = (this.size.Width - ((objects.Count + 1) * spacing)) / objects.Count;
}
foreach (Object object in objects)
{
object.Size = objectSize;
}
}
绘制图像的代码/ 这个图像水平和垂直居中并绘制它们。
public void DrawObjects()
{
if (objects[0].Image != null)
{
drawImage = new Bitmap(size.Width, size.Height);
System.Drawing.Graphics tempGraphics = Graphics.FromImage(drawImage);
int spacing = 10;
int totalwidth = this.size.Width; //- ((objects.Count * spacing) + spacing);
int totalUsedWidth = objects.Count * objects[0].Size + ((objects.Count * spacing) + spacing);
int realign = (totalwidth - totalUsedWidth) / 2;
for (int i = 0; i < objects.Count; i++)
{
int startxposition = (objects[i].Size * i + 10 * i + 10) + realign;
int startyposition = (size.Height - objects[i].Size) / 2;
tempGraphics.DrawImage(objects[i].ObjectImage, startxposition, startyposition);
}
tempGraphics.Dispose();
}
}
答案 0 :(得分:1)
首先你需要宽高比
Double squares = columns * columns * aspectRatio;
使用纵横比,您需要进行计算,将多个列转换为多个正方形。
Double columns = Math.Ceiling(Math.Sqrt(squares / aspectRatio));
Double rows = Math.Ceiling(columns * aspectRatio);
Double actualSquares = rows * columns;
Double squareWidth = width / columns;
Double squareHeight = height / rows;
您需要的最小平方数大于您所拥有的平方数,因此请反转公式。
Math.Ceiling
请注意,由于<?php
$url = $_SERVER['HTTP_HOST'];
$uri = $_SERVER['REQUEST_URI'];
function generateLink($url, $uri){
if(strpos($url,'domain-a.com') !== false){
$link = 'http://domain-b.com' . $uri;
return $link;
}else if(strpos($url,'domain-b.com') !== false){
$link = 'http://domain-c.com' . $uri;
return $link;
}else if(strpos($url,'domain-c.com') !== false){
$link = 'http://domain-a.com' . $uri;
return $link;
}
}
?>
<a href="<?php echo generateLink($url, $uri); ?>">Link</a>
您的方块不会是正方形。您需要取较小的数字并计算剩余部分以形成边距,然后您可以填充每个方格或形成边框
答案 1 :(得分:0)
这就是我解决它的方式。 这是一种蛮力方法。(它将尝试所有组合并选择最佳
public void SetObjectSize()
{
int objectSize = 0;
for (int objectsPerRow = 1; objectsPerRow <= objects.Count ; objectsPerRow++)
{
int rows =(int)Math.Ceiling(((double)objects.Count) / objectsPerRow);
int horizontalSize = (this.size.Height - (rows * spacing + spacing)) / rows;
int verticalSize = (this.size.Width - (objectsPerRow * spacing + spacing)) / objectsPerRow;
int newSize = horizontalSize < verticalSize ? horizontalSize : verticalSize ;
if (newSize > objectSize)
{
this.rows = rows;
this.objectsPerRow = objectsPerRow ;
objectSize = newSize;
}
}
}