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
相关产品推荐
相关产品推荐

