【问题标题】:C# graphics.drawImage() crops my ImageC# graphics.drawImage() 裁剪我的图像
【发布时间】:2013-07-17 03:19:33
【问题描述】:

我正在尝试将图像放在更大的图像上。但是内部图像在 drawImage() 之后被裁剪。这是我的代码:

Bitmap im = new Bitmap("D:\\Steffen\\New folder\\I1\\I1\\" + filename + ".png");
int sizeX = im.Width;
int sizeY = im.Height;
int size = 0;
bool isWidth = false;
if (sizeX > sizeY) 
{ 
    size = sizeX; isWidth = true; 
}
else if(sizeY > sizeX)
{ 
    size = sizeY; isWidth = false; 
}

filename = filename + "New";
Bitmap bg = new Bitmap(size,size);
SolidBrush brush = new SolidBrush(Color.Aqua);

using (Graphics g = Graphics.FromImage(bg))
{
    g.FillRectangle(brush, 0, 0, size, size);
    if (isWidth==true)
    {
        g.DrawImage(im, 0, (size - sizeY) / 2);
    }
    else if(isWidth==false)
    {
        g.DrawImage(im, (size-sizeX)/2, 0);
    }
}

提前致谢

【问题讨论】:

  • 无复制。顺便说一句,如果sizeX == sizeY,您没有size 的值。
  • 谢谢,但它仍然不会影响问题,因为我正在测试非二次图像
  • 第一个位图'im'有 365x500 像素,24 位深度

标签: c# .net visual-studio-2010 drawimage


【解决方案1】:

我的猜测是图像的分辨率是问题:

试试这样:

Bitmap im = new Bitmap("D:\\Steffen\\New folder\\I1\\I1\\" + filename + ".png");
im.SetResolution(96F, 96F);

【讨论】:

  • 是的!你的权利。谢谢你的主意。我已经通过将第一个位图的“位深度”转换为第二个public static Bitmap ConvertTo16bpp(Image img) { var bmp = new Bitmap(img.Width, img.Height, System.Drawing.Imaging.PixelFormat.Format16bppRgb555); using (var gr = Graphics.FromImage(bmp)) gr.DrawImage(img, new Rectangle(0, 0, img.Width, img.Height)); return bmp; } 来解决它
  • 请注意 96 dpi 不能保证是正确的。它会越来越不正确:) Graphics.DpiX/Y 很重要。使用 DrawImage(Image, Rectangle) 重载更容易,所以这无关紧要。
猜你喜欢
  • 2022-02-24
  • 2011-04-23
  • 2017-08-04
  • 2017-05-22
  • 2011-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多