我先写了两个应用程序: 使用C#中的随机类生成具有随机颜色的图像,范围从0到255 ARGB每个像素的颜色,图像大小为3000 x 3000宽度和高度。 第二次申请: 生成具有相同宽度和高度(3000 x 3000)的图像,但对于每个像素的ARGB颜色的A,R,G,B使用范围从60到120 ......
First App生成大小为500 KB的图像。 第二个应用程序生成大小为24 MB的图像。
它们都使用PNG作为图像格式和32位颜色深度。 我无法理解图像两者之间的区别,以及为什么图像尺寸不同? 什么东西显着影响图像的大小? .................................................. .................................................. ....................... 抱歉我的英语不好。
这是第一个应用代码:
public void GenerateImage2()
{
Bitmap Img = new Bitmap(3000, 3000, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
LockBitmap LBM = new LockBitmap(Img);
LBM.LockBits();
for (int x = 0; x < 3000; x++)
{
for (int y = 0; y < 3000; y++)
{
Random Ran = new Random();
Color C = Color.FromArgb(Ran.Next(0, 255), Ran.Next(0, 255), Ran.Next(0, 255), Ran.Next(0, 255));
LBM.SetPixel(x, y, C);
}
}
LBM.UnlockBits();
Img.Save("redandrandom.png", System.Drawing.Imaging.ImageFormat.Png);
}
第二个应用代码:
GC.Collect();
int XDim = 0;
int YDim = 0;
int ImageDimentions = 3000;
int ForloopRange = ImageDimentions * ImageDimentions;
Color CurrentColor = Color.Empty;
Bitmap Btm = new Bitmap(ImageDimentions, ImageDimentions);
LockBitmap Img = new LockBitmap(Btm);
Img.LockBits();
Random Rand = new Random();
for (int i = 0; i < ForloopRange; i++)
{
CurrentColor = Color.FromArgb(Rand.Next(0, 255), Rand.Next(0, 255), Rand.Next(0, 255), Rand.Next(0, 255));
Img.SetPixel(XDim, YDim, CurrentColor);
YDim += 1;
if (YDim == ImageDimentions)
{
XDim += 1;
YDim = 0;
}
if (XDim == ImageDimentions)
{
Img.UnlockBits();
Btm.Save(SavedFileName + ".png", ImageFormat.Png);
return;
}
}
答案 0 :(得分:2)
这是一个(常见的)错误,因为Ran的实例创建得如此之快,以至于他们没有得到不同的种子。把它从循环中拿出来得到真实的(伪)随机数!
for (int x = 0; x < 3000; x++)
{
for (int y = 0; y < 3000; y++)
{
Random Ran = new Random();
由于第一种情况下许多或大多数像素都相同,因此图像尺寸要小得多。
答案 1 :(得分:0)
PNG
是压缩格式。其中一个比另一个压缩得好。