private void button6_Click(object sender, System.EventArgs e) { if (!WangTilesValid) { return; } if (saveFileDialog1.ShowDialog() == DialogResult.OK) { Bitmap[] bitmaps = new Bitmap[WangTiles.Length]; for (int i = 0; i < WangTiles.Length; i++) { bitmaps[i] = WangTiles[i].WangBitmap; } WangTiler.SaveMegaTile(bitmaps, saveFileDialog1.FileName + ".bmp"); } }
private void button4_Click(object sender, System.EventArgs e) { if (!QuiltedTextureMapValid) { MessageBox.Show("Please load a valid quilt file first."); return; } if (QuiltedTextureMap.Width <= (int)numericUpDownWangTileSize.Value) { MessageBox.Show("Your Wang Tiles must be smaller than your quilted image texture."); return; } WangTile[] wangTiles = WangTile.LoadDescriptionsFromFile(new StreamReader(new MemoryStream(System.Text.Encoding.ASCII.GetBytes(this.textBoxWangSpecs.Text)))); WangTiles = WangTiler.WangTile(wangTiles, new Size((int)numericUpDownWangTileSize.Value, (int)numericUpDownWangTileSize.Value), new Bitmap[] { QuiltedTextureMap }, (int)numericUpDownQuiltingBlockOverlap.Value, (int)numericUpDownMaxWangMatchAttempts.Value, (int)numericUpDownMaxWangMatchError.Value, checkBoxOnePixelOverlapBetweenTiles.Checked); Console.WriteLine("yeah"); }
public void RecalcScanLines() { int buff = this.OnePixelOverlap ? 1 : 0; int halfWangTileWidth = WangTileSize.Width / 2; foreach (WangTileWithBitmapInfo wtbi in WangTilesInfo) { /// TODO: IF you wanted to blend multiple bitmaps, for example to introduce inhomogeneity, you'd need to first /// have computed blended north, west, south, east blend cuts for each possible combination of tiles, /// for each possible combination of corners. Rectangle northSample = SamplePortions[0, wtbi.WangTile.ColorN]; Rectangle eastSample = SamplePortions[0, wtbi.WangTile.ColorE]; Rectangle southSample = SamplePortions[0, wtbi.WangTile.ColorS]; Rectangle westSample = SamplePortions[0, wtbi.WangTile.ColorW]; Point northSampleCenter = new Point(northSample.Left + (northSample.Width / 2), northSample.Top + (northSample.Height / 2)); Point eastSampleCenter = new Point(eastSample.Left + (eastSample.Width / 2), eastSample.Top + (eastSample.Height / 2)); Point southSampleCenter = new Point(southSample.Left + (southSample.Width / 2), southSample.Top + (southSample.Height / 2)); Point westSampleCenter = new Point(westSample.Left + (westSample.Width / 2), westSample.Top + (westSample.Height / 2)); wtbi.ScanLineNW = WangTiler.GetMinErrorBoundaryCutNWToSEDiagonal(SourceBitmaps[0], SourceBitmaps[0], new Rectangle(new Point(northSampleCenter.X - halfWangTileWidth, northSampleCenter.Y - buff), new Size(halfWangTileWidth, halfWangTileWidth)), // north tile, left side new Point(westSampleCenter.X - buff, westSampleCenter.Y - halfWangTileWidth), // west tile, top side out wtbi.MatchingErrorNW); wtbi.ScanLineNE = WangTiler.GetMinErrorBoundaryCutNEToSWDiagonal(SourceBitmaps[0], SourceBitmaps[0], new Rectangle(new Point(northSampleCenter.X, northSampleCenter.Y - buff), new Size(halfWangTileWidth, halfWangTileWidth)), // north tile, right side new Point(eastSampleCenter.X - halfWangTileWidth - buff, eastSampleCenter.Y - halfWangTileWidth), // east tile, top side out wtbi.MatchingErrorNE); wtbi.ScanLineSE = WangTiler.GetMinErrorBoundaryCutNWToSEDiagonal(SourceBitmaps[0], SourceBitmaps[0], new Rectangle(new Point(southSampleCenter.X, southSampleCenter.Y - halfWangTileWidth + buff), new Size(halfWangTileWidth, halfWangTileWidth)), // south tile, right side new Point(eastSampleCenter.X - halfWangTileWidth + buff, eastSampleCenter.Y), // east tile, top side out wtbi.MatchingErrorSE); wtbi.ScanLineSW = WangTiler.GetMinErrorBoundaryCutNEToSWDiagonal(SourceBitmaps[0], SourceBitmaps[0], new Rectangle(new Point(southSampleCenter.X - halfWangTileWidth, southSampleCenter.Y - halfWangTileWidth + buff), new Size(halfWangTileWidth, halfWangTileWidth)), // south tile, left side new Point(westSampleCenter.X - buff, westSampleCenter.Y), // west tile, top side out wtbi.MatchingErrorSW); } }