2013-06-23 208 views
0

不知道該怎麼做:如何獲得圖像中的圖像?

我們有一個圖像,我們知道這張圖片中一張卡的常量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

+1

要做到這一點,爲什麼呢?你基本上是要求爲C#(切斷端)一個CSS Sprite的等同,對吧?我看不出有什麼因爲你沒有獲得CSS sprites提供的優勢,這是一個單一的下載到客戶端的機器。你已經在客戶端的機器上作爲一個WinForms應用程序。所以是唯一的好處,你將有一個圖像而不是52? –

+0

我想這樣做,而不是顯示一個圖像52.真的,這是C#的問題。這是一個在CSS中的正常行爲,當然,但如果你明白,我需要在C#中解決這個問題。 – RePRO

+0

不,我知道你想用C#和CSS做,它只是想知道更多的動機。看起來你下面有一些答案讓你開始。 –

回答

5

用於單卡創建位圖.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

這應該是一個良好的開端

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

另一種方法是將圖像分割成一組圖像,一個圖像爲每個卡。

ImageSplitter,是一個網站,它目前有一個在線圖像分割工具,可用於將OP圖像有效地分割成一組圖像,每張圖像一張圖像。

要注意,由於OP的圖像是2925×1260像素,並且圖像在圖像中跨越4行乘13列,所以結果將是一組225×315像素大小的卡片圖像,以zip格式下載通過使用在討論在線圖像分割工具文件。

在網上圖像分割工具的網站中的討論,你會發現目前在主頁上選擇上傳的圖像。在這裏你會發現,你可以:
1.單擊它說:「點擊此處上傳您的圖片」
2.點擊「上傳圖片」
3.一旦圖像上傳,在下一屏幕上,選擇了「SPLIT IMAGE」工具
4.然後輸入行和列目前在工具
發現的數量 - 對於該圖像中,輸入「4」的行,和「13」的列
5。接下來,點擊工具上當前找到的「SPLIT IMAGE」

按照上面的步驟1到5,將包含在zip文件中的一組圖像(每張卡片一張圖像)下載到瀏覽器用於duscussion在線圖像分割工具。

Link to Visual Guide for the Online Image Splitting Tool

+0

一個潛在的解決方案的鏈接總是受歡迎的,但請[在鏈接周圍添加上下文](// meta.stackoverflow.com/a/8259/169503),以便您的同行用戶可以瞭解它是什麼以及它爲什麼在那裏。如果目標網站無法訪問或永久離線,請始終引用重要鏈接中最相關的部分。考慮到_僅僅是一個鏈接到外部site_是一個可能的原因,因爲[爲什麼和如何刪除一些答案?](// stackoverflow.com/help/deleted-answers)。 – Mogsdad

+0

我需要聲望爲10才能發佈圖像,但不幸的是我還沒有,所以在此之前,請參考[在線圖像分割工具指南](http://i.stack.imgur.com/ ifJG5.png) –