看来,如果用于Windows快捷方式图标的图像没有1:1的宽高比,它看起来会很拉伸。
左边一个是实际看起来的样子,右边一个是看起来的样子。
我正在从图像中以编程方式创建快捷方式和图标,因此我想修复图像,因此它将具有正确的宽高比,但图像看起来不会拉伸。这可以通过向图像添加一些填充来实现。
就目前而言,我只是将图像复制到具有正确宽高比的新位图,但用透明像素填充新区域
public static Bitmap FixBitmapAspectRatio(Bitmap sourceBitmap)
{
if (sourceBitmap.Width.Equals(sourceBitmap.Height))
return sourceBitmap;
int size;
bool horizontallyOriented;
if (sourceBitmap.Width > sourceBitmap.Height)
{
horizontallyOriented = true;
size = sourceBitmap.Width;
}
else
{
horizontallyOriented = false;
size = sourceBitmap.Height;
}
var sizeDifference = Math.Abs(sourceBitmap.Width - sourceBitmap.Height);
var newBitmap = new Bitmap(size, size);
var transparentColor = Color.FromArgb(0, 0, 0, 0);
for (int i = 0; i < size; i++)
{
for (int j = 0; j < size; j++)
{
if (horizontallyOriented)
{
if (i < sizeDifference / 2 || i >= sizeDifference / 2 + sourceBitmap.Height)
{
newBitmap.SetPixel(j, i, transparentColor);
}
else
{
var originalPixel = sourceBitmap.GetPixel(j, i - sizeDifference / 2);
newBitmap.SetPixel(j, i, originalPixel);
}
}
else
{
if (i < sizeDifference / 2 || i >= sizeDifference / 2 + sourceBitmap.Width)
{
newBitmap.SetPixel(i, j, transparentColor);
}
else
{
var originalPixel = sourceBitmap.GetPixel(i - sizeDifference / 2, j);
newBitmap.SetPixel(i, j, originalPixel);
}
}
}
}
return newBitmap;
}
但我不知道,如果我发明了一个轮子。有没有办法通过标准库来实现这一目标,或者更简单的方法来实现我的需求?
答案 0 :(得分:1)
你真的不想设置单个像素:)
相反,请查看Graphics
课程,特别是Graphics.FromImage
(您在哪里绘画)和Graphics.DrawImage
(这是您的绘画方式)缩放图像)。