[英]How to get image in image?
只是不知道如何做到这一点:
我们有一张图像,并且我们知道这张图像中一张卡的WIDTH
和HEIGHT
。 我想在这张图片中显示一张图片。 下一个常数是我们有多少张牌,所以CNT_CARDS = 52
。 我不想创建每张卡片-仅显示该卡片。 我正在使用Winforms(C#)。
伪码
加载图像。
对于每张卡均可申请:
int offsetTop = row * HEIGHT;
int offsetLeft = column * WIDTH;
imageInImage.Location = new Point(offsetLeft, offsetTop);
imageInImage.Size = new Size(WIDTH, HEIGHT);
例如,如果我们想获得钻石女王:
int offsetTop = 2 * HEIGHT;
int offsetLeft = 11 * WIDTH;
通过使用Graphics.DrawImage()为单个卡创建一个位图。 样板示例实现可能如下所示:
static Bitmap GetCardImage(Bitmap cards, int cardnum) {
int width = cards.Width / 13;
int height = cards.Height / 4;
int left = width * (cardnum % 13);
int top = height * (cardnum % 4);
var bmp = new Bitmap(width, height,
System.Drawing.Imaging.PixelFormat.Format32bppPArgb);
using (var gr = Graphics.FromImage(bmp)) {
gr.DrawImage(cards,
new Rectangle(0, 0, width, height),
new Rectangle(left, top, width, height),
GraphicsUnit.Pixel);
}
return bmp;
}
您可以通过创建位图数组来进一步扩展此位图,以便在需要绘制位图时可以随时使用它们。 您会在启动屏幕上执行的操作。 假设您将带有卡面的图像添加为名为CardFaces的资源:
static Bitmap[] CreateDeckImages() {
var deck = new Bitmap[52];
using (var images = Properties.Resources.CardFaces) {
for (int cardnum = 0; cardnum < deck.Length; ++cardnum) {
deck[cardnum] = GetCardImage(images, cardnum);
}
}
return deck;
}
未经测试,应该接近。
这应该是一个好的开始
var bmp = new Bitmap(225, 315);
var OriBmp = new Bitmap(@"c:\gnv4Q.jpg");
var g = Graphics.FromImage(bmp);
g.DrawImage(OriBmp,0,0,new Rectangle(225,315,225,315),GraphicsUnit.Pixel);
bmp.Save(@"c:\test.png");
另一种选择是将图像分成一组图像,每张卡一个图像。
ImageSplitter ,是一个网站,当前拥有一个在线图像拆分工具,可用于将OP的图像高效地拆分为一组图像,每张卡一个图像。
请注意,由于OP的图像为2925 x 1260像素,并且卡片跨图像中的4行x 13列,因此结果将是通过使用讨论中的在线图像分割工具。
在讨论中的在线图像拆分工具网站上,您当前可以在主页上找到上传图像的选项。 您可能会发现:
1.点击显示“点击此处上传图片”的位置
2.点击“上传图片”
3.上载图像后,在下一个屏幕上,选择“分割图像”工具
4.然后输入当前在工具上找到的行数和列数
-对于此图像,在“行”中输入“ 4”,在列中输入“ 13”
5.接下来,单击工具上当前找到的“分割图像”
通过执行上面的步骤1到5,将在压缩文件中下载一组图像,即zip文件中包含的每个卡的一个图像,该浏览器的下载文件夹用于联机图像拆分工具。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.