You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#如何放大PNG?VS Code中记忆卡游戏卡片显示过小问题

记忆配对卡牌游戏卡片显示过小问题

当前游戏界面截图:
当前游戏界面截图

我正在Visual Studio Code中开发一款记忆配对卡牌游戏,但卡片显示过小。实际卡牌PNG的尺寸为2048x2048、96dpi、32位。

代码片段:

private void LoadPictures()
{
    int leftPos = 20;
    int topPos = 70;
    int rows = 0;

    for (int i = 0; i < 20; i++)
    {
        PictureBox newPic = new PictureBox();
        newPic.Height = 70;
        newPic.Width = 50;
        newPic.BackColor = Color.White;
        newPic.SizeMode = PictureBoxSizeMode.Zoom;
        //newPic.SizeMode = PictureBoxSizeMode.StretchImage;
        newPic.Click += NewPic_Click;
        pictures.Add(newPic);

        if (rows < 5)
        {
            rows++;
            newPic.Left = leftPos;
            newPic.Top = topPos;
            this.Controls.Add(newPic);
            leftPos = leftPos + 95;

        }
        
        if (rows == 5)
        {
            leftPos = 20;
            topPos += 80;
            rows = 0;
        }
}

我尝试将newPic.SizeMode = PictureBoxSizeMode.Zoom;替换为newPic.SizeMode = PictureBoxSizeMode.StretchImage;,效果有所改善但卡片仍不够大。我希望让PNG图片完全匹配PictureBox的大小,不知该如何操作。


解决方法

问题核心是你设置的PictureBox本身尺寸太小(70x50),先调整控件的宽高,再配合合适的SizeMode就能让图片填满控件:

  • 增大PictureBox的尺寸
    直接修改newPic.Height和newPic.Width的值,比如改成newPic.Height = 150; newPic.Width = 150;(因为原图片是正方形,控件设为正方形能避免黑边),同时同步调整布局间距(比如leftPos += 160、topPos += 160),防止卡片重叠。

  • 匹配SizeMode需求

    • 要让图片完全填满控件且忽略比例:用PictureBoxSizeMode.StretchImage,它会强制图片拉伸到控件的宽高。
    • 要保持图片比例同时填满控件:用PictureBoxSizeMode.Zoom,此时控件宽高比例最好和原图片(2048x2048正方形)一致,这样图片不会留空白。
  • 可选优化:提前压缩图片
    2048x2048的图片直接缩放显示也能生效,但提前把图片压缩到和PictureBox接近的尺寸(比如150x150),能减少内存占用,加载和显示更流畅。

示例修改后的代码片段:

private void LoadPictures()
{
    int leftPos = 20;
    int topPos = 70;
    int rows = 0;
    // 设置卡片为正方形,匹配原图片比例
    int cardSize = 150;

    for (int i = 0; i < 20; i++)
    {
        PictureBox newPic = new PictureBox();
        newPic.Height = cardSize;
        newPic.Width = cardSize;
        newPic.BackColor = Color.White;
        newPic.SizeMode = PictureBoxSizeMode.Zoom;
        newPic.Click += NewPic_Click;
        pictures.Add(newPic);

        if (rows < 5)
        {
            rows++;
            newPic.Left = leftPos;
            newPic.Top = topPos;
            this.Controls.Add(newPic);
            // 调整间距,留10px空隙避免重叠
            leftPos += cardSize + 10;

        }
        
        if (rows == 5)
        {
            leftPos = 20;
            topPos += cardSize + 10;
            rows = 0;
        }
    }
}

内容的提问来源于stack exchange,提问作者Calluxm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 14:55:12