Texture generator, Python Per Pixel (C#, IronPython, Python)

Step 0.

You can see previous C# texture generator code :
https://gameenginebread.blogspot.com/2017/02/this-is-c-code-to-generate-custom.html

It was a code-based tools and only available to programmers. Python is one of the best script for everyone.
So let's create the tool again simply with Python.


Step 1.

Create a new C# project.

Download 'iron python' and add DLLs to references.

IronPython :
http://ironpython.net

How to setup :
MSDN : Running IronPython scripts from a c#

Step 2.

Add controls. I have not changed the button name, but it will be understood.

Step 3.

This is the code.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
using System;
using System.Drawing;
using System.Windows.Forms;
using IronPython.Hosting;

namespace PythonPerPixel
{
 public partial class MainForm : Form
 {
  Microsoft.Scripting.Hosting.ScriptEngine PythonInst;
  Microsoft.Scripting.Hosting.ScriptScope PythonScope;

  public MainForm()
  {
   InitializeComponent();

   PythonInst = Python.CreateEngine();
   PythonScope = PythonInst.CreateScope();
  }

  private void button1_Click( object sender, EventArgs e )
  {
   int Size = Int32.Parse( textBox2.Text.ToString() );
   pictureBox1.Image = CreateBMP( new Size( Size, Size ) );
  }

  Bitmap CreateBMP( Size ImageSize )
  {
   Bitmap BitmapData = new Bitmap( ImageSize.Width, ImageSize.Height, System.Drawing.Imaging.PixelFormat.Format32bppRgb );

   for( int x = 0; x < ImageSize.Width; x++ )
   {
    for( int y = 0; y < ImageSize.Height; y++ )
    {
     int Result = RunPython( ImageSize, x, y );
     BitmapData.SetPixel( x, y, Color.FromArgb( Result, Result, Result ) );
    }
   }

   return BitmapData;
  }

  int RunPython( Size ImageSize, int x, int y )
  {
   PythonScope.SetVariable( "x", x );
   PythonScope.SetVariable( "y", y );
   PythonScope.SetVariable( "fx", (float)x / ImageSize.Width );
   PythonScope.SetVariable( "fy", (float)y / ImageSize.Height );
   PythonScope.SetVariable( "result", 0 );

   try
   {
    PythonInst.Execute( textBox1.Text, PythonScope );
   }
   catch( Exception e )
   {
    return 0;
   }

   return (int)( Math.Max( 0, Math.Min( 255, PythonScope.GetVariable( "result" ) ) ) );
  }

  private void button2_Click( object sender, EventArgs e )
  {
   Clipboard.SetImage( pictureBox1.Image );
  }
 }
}

Code highlight by http://hilite.me/
Thank you!

Comments

Popular posts from this blog

Liquid material in a bottle

MatCap material

How to Make Circular Progress Bar(or Rounded Rectangle)