Frage

ich einen Code einrichten, um zufällig eine Bitmap 2 verschiedene Farben decken, 7 von 10 mal die Farbe Blau sein würde, und 3 von 10 mal, würde die Farbe grün. Wenn es jedoch sieht es sehr un-zufällig gemacht wird, wie es 7 blaue Pixel ein paar Mal setzen beschlossen, dann 3 grüne Pixel ein paar Mal und so weiter.
Beispiel:
alt text Mein Code ist:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace FourEx
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            Bitmap bmp = new Bitmap(canvas.Image);
            System.Drawing.Imaging.BitmapData bmpdata = bmp.LockBits(new Rectangle(0, 0, 800, 600), System.Drawing.Imaging.ImageLockMode.ReadWrite, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
            unsafe
            {
                int tempy = 0;
                while (tempy < 600)
                {
                    byte* row = (byte*)bmpdata.Scan0 + (tempy * bmpdata.Stride);
                    for (int x = 0; x <= 800; x++)
                    {
                        Random rand = new Random();
                        if (rand.Next(1,10) <= 7)
                        {
                            row[x * 4] = 255;
                        }
                        else
                        {
                            row[(x * 4) + 1] = 255;
                        }
                    }
                    tempy++;
                }
            }
            bmp.UnlockBits(bmpdata);
            canvas.Image = bmp;
        }
    }
}

Wenn Sie eine zusätzliche Informationen benötigen, lassen Sie mich wissen.

War es hilfreich?

Lösung

diese Zeile bewegen:

Random rand = new Random(); 

auf dem äußersten Umfang. Wenn Sie diese schnell viele schaffen gleichzeitig Samen (durch Präzision der Uhr) und erzeugen die gleiche ‚zufällig‘ Sequenz erhalten. Plus Sie wirklich brauchen eine Zufalls Beispiel ...

private void Form1_Load(object sender, EventArgs e) 
{ 
    Bitmap bmp = new Bitmap(canvas.Image); 
    System.Drawing.Imaging.BitmapData bmpdata = bmp.LockBits(new Rectangle(0, 0, 800, 600), System.Drawing.Imaging.ImageLockMode.ReadWrite, System.Drawing.Imaging.PixelFormat.Format32bppArgb); 

    Random rand = new Random(); 

    unsafe 
    { 
    // ....
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top