博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
解决随机数生成的坐标在对角线上的问题
阅读量:5302 次
发布时间:2019-06-14

本文共 1781 字,大约阅读时间需要 5 分钟。

最近写一个小程序,要将很多图片随机显示在屏幕上(不限次数),一开始是想在线程中死循环执行,后来错太多改成了在time控件上的事件上执行。问题开始了

1.p.Load("C:\\Documents and Settings\\Administrator\\My Documents\\My Pictures\\img\\image\\xiao.gif");

这是最开始的代码,报错GDI+ 中发生一般性错误s,一看懵了,这是啥子错误没见过啊,后来查了一下

 PictureBox p = new PictureBox();

                        string aa = "D:\\imgs\\img\\image\\2.gif";
                        string bb = "D:\\imgs\\img\\0.jpg";
                        //p.Load("C:\\Documents and Settings\\Administrator\\My Documents\\My Pictures\\img\\image\\xiao.gif");
                        Random r = new Random();
                        int x = X;
                        int y = r.Next(X);
                        Console.WriteLine(x + "=======" + x);
                        p.Location = InitPoint();
                        Bitmap bmp = null;
                        if (i % 2 == 0)
                        {
                                bmp = new Bitmap(aa);
                        }
                        else
                        {
                                bmp = new Bitmap(bb);
                        }
                        //新建第二个bitmap类型的bmp2变量,我这里是根据我的程序需要设置的。
                        Bitmap bmp2 = new Bitmap(400, 400, System.Drawing.Imaging.PixelFormat.Format16bppRgb565);
                        //将第一个bmp拷贝到bmp2中
                        Graphics draw = Graphics.FromImage(bmp2);
                        draw.DrawImage(bmp, 0, 0);
                        p.Image = (Image)bmp2;//读取bmp2到picturebox
                        draw.Dispose();
                        bmp.Dispose();
                        this.Controls.Add(p);

 

改成这样就不报错了。

后来在设置图片的坐标时利用随机数生成却发现生成的都是对角线坐标

后来在博客园里看到一段代码解决了问题

   private Point InitPoint()

                {
                        Point p = new Point();
                        Rectangle ScreenArea = System.Windows.Forms.Screen.GetBounds(this);
                        int width1 = ScreenArea.Width; //屏幕宽度
                        int height1 = ScreenArea.Height; //屏幕高度
                        int x, y;
                        long tick = DateTime.Now.Ticks;

                        Random pointX = new Random(GetRandomSeed());

                        Random pointY = new Random(GetRandomSeed());
                        x = pointX.Next(0, width1 - 50);
                        y = pointY.Next(0, height1 - 50);
                        p = new Point(x, y);
                        return p;
                }
                /// <summary>
                /// 随机生成种子数(摘抄)
                /// </summary>
                /// <returns></returns>
                static int GetRandomSeed()
                {
                        byte[] bytes = new byte[4];
                        RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
                        rng.GetBytes(bytes);
                        return BitConverter.ToInt32(bytes, 0);
                }

转载于:https://www.cnblogs.com/bangejingting/archive/2011/09/14/2176800.html

你可能感兴趣的文章
xml.exist() 实例演示
查看>>
判断是否为空然后赋值
查看>>
zabbix监控日志文件
查看>>
正则表达式
查看>>
pip install torch on windows, and the 'from torch._C import * ImportError: DLL load failed:' s...
查看>>
环套树
查看>>
java基础(一):我对java的三个环境变量的简单理解和配置
查看>>
arcgis api 4.x for js 结合 Echarts4 实现散点图效果(附源码下载)
查看>>
YTU 2625: B 构造函数和析构函数
查看>>
apache自带压力测试工具ab的使用及解析
查看>>
C#使用Xamarin开发可移植移动应用(2.Xamarin.Forms布局,本篇很长,注意)附源码
查看>>
jenkins搭建
查看>>
C#中使用Split分隔字符串的技巧
查看>>
eclipse的调试方法的简单介绍
查看>>
加固linux
查看>>
IPSP问题
查看>>
(转)Java中的String为什么是不可变的? -- String源码分析
查看>>
HNU 10362 A+B for Input-Output Practice (II)
查看>>
十. 图形界面(GUI)设计9.列表和组合框
查看>>
10.17动手动脑
查看>>