如何获取图像中的图像?

时间:2013-06-23 14:13:26

标签: c#

不知道该怎么做:

我们有一张图片,我们知道此图片中一张卡片的常量WIDTHHEIGHT。我想在此图片中显示一张图片。下一个常数是我们有多少张牌,所以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;

poker image

3 个答案:

答案 0 :(得分:5)

使用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;
    }

未经测试,应该接近。

答案 1 :(得分:1)

这应该是一个好的开始

        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");

答案 2 :(得分:0)

另一种方法是将图像分成一组图像,每张卡一张图像。

ImageSplitter,是一个网站,目前有一个在线图片分割工具,可以用来有效地将OP图像分割成一组图像,每张卡一张图像。

要注意的是,由于OP的图像是2925 x 1260像素,并且图像在图像中跨越4行×13列,因此结果将是以zip文件形式下载的225 x 315像素大小的卡片图像的集合在讨论中使用在线图像分割工具。

在讨论中的在线图像分割工具网站上,您将在主页上找到上传图像的选项。你会发现的,你可以:
1.点击它所说的位置&#34;点击此处上传您的图像&#34;
2.单击&#34;上传图像&#34;
3.上传图像后,在下一个屏幕上,选择&#34; SPLIT IMAGE&#34;工具
4.然后输入当前在工具上找到的行数和列数     - 对于此图片,请输入“&#39; 4&#39;对于行,以及&#39; 13&#39;对于列
5.接下来,单击&#34; SPLIT IMAGE&#39;目前在工具上找到

按照上面的步骤1到5,一个图像,每张卡的一张图像,包含在一个zip文件中,将被下载到用于在线图像分割工具的浏览器的下载文件夹中。

Link to Visual Guide for the Online Image Splitting Tool