如何绘制40亿方块

问题描述

今天做了个测试,研究了下图形的构成,图形由ARGB构成,每个单元有255个组成,就是255*255*255*255接近40亿个颜色,会一点SIVERLIGHT也知道如何绘制方块和填充颜色,当然用其他技术也行,就想通过程序写一个40亿颜色的程序,看看这40亿的颜色到底是什么鬼。这里遇到了很多问题,主要是算法,当然还有个重要的问题是内存管理,用4个255进行循环,40亿的计算量,我的计算机(I7,8G,650M)光是打印这40亿的数字估计可能需要几个小时,我精简了算法,做了600多W颜色的填充,都已经经常超出内存,每次到100多W的时候,就报超出系统内存。短时间可能暂时无法完成该程序,但这是我的一个目标,在我有生之年,不管用什么技术,花多少时间,我将亲自用程序绘制出40多亿的颜色,今天写这个也是给自己订个目标,希望有缘的人,能看到,共同来实现这个目标,非常感谢。贴上,现在研究的代码publicMainPage(){InitializeComponent();SizeChanged+=(o,e)=>{intdw=25;doubleAllBorder=Math.Pow(dw,4);doublebordersize=ActualWidth/(Convert.ToDouble(AllBorder)/ActualHeight);List<Grid>allPanels=newList<Grid>();List<Grid>allgrids=newList<Grid>();Int64MaxBorder=Convert.ToInt64(Convert.ToDouble((AllBorder/ActualHeight).ToString("0.00")));for(inti=0;i<ActualHeight;i++){Gridp=newGrid();p.Height=bordersize;RowDefinitionrd=newRowDefinition();rd.Height=newGridLength(1);LayoutRoot.RowDefinitions.Add(rd);allPanels.Add(p);LayoutRoot.Children.Add(p);for(intj=0;j<MaxBorder;j++){ColumnDefinitioncd=newColumnDefinition();cd.Width=newGridLength(1,GridUnitType.Star);p.ColumnDefinitions.Add(cd);Gridg=newGrid();if(j%2==0)g.Background=newSolidColorBrush(Colors.White);else{g.Background=newSolidColorBrush(Colors.Red);}p.Children.Add(g);Grid.SetColumn(g,j);allgrids.Add(g);}Grid.SetRow(p,i);}return;Int32nowxh=0;Int32nowhh=0;try{for(bytea=0;a<dw;a++){for(byter=0;r<dw;r++){for(byteg=0;g<dw;g++){for(byteb=0;b<dw;b++){if(nowxh%10==0){allgrids[nowxh].Background=newSolidColorBrush(Color.FromArgb(a,r,g,b));nowxh=nowxh+1;}}}}}}catch(Exceptionex){throwex;}MessageBox.Show("1");};}代码比较简单,算法也比较简单,估计还是对内存管理和分配涉入太浅,希望通过这个程序,对内存管理,分配,释放能有个充分的认识,欢迎大家讨论更贴。

解决方案

解决方案二:
我是小白,说错了勿怪,可以分成255次来吗,这样一次用的内存就小了吧。
解决方案三:
首先Alpha透明通道并不是颜色,现在也应该还没有显示器能把Alpha真正透明显示,然后每个通道0-255是256种。需要考虑的只是RGB的24位16777216种颜色。想看结果这里有:,全部都是使用了所有16777216颜色的图。实际上一张4096*4096的图就能放下了。你那样用控件显示显然开销会非常大,就失去了意义,改成绘制一个图片才比较现实。也就是创建个Bitmap,LockBits后把0-16777215对应的24位二进制填进去。然而这只不过是人为定义的一种色彩空间,还有其它的色彩空间,呈现出来的结果也会因为操作系统设置、显卡设置、显示器不同而不同。颜色不是离散的,有无穷多种。甚至使用RGB三色来模拟其它颜色也只是对人视觉系统的一种欺骗,而就算眼睛接收到的光相同,人脑在处理的时候也会有偏差,之前的白金/蓝黑就是很好的例子。这个事情作为提高技术的短期目标还行,并不是件“有生之年”的事。让显示/打印/投影设备能完美的重现自然界的所有颜色才是。
解决方案四:
这个倒是没想过,感觉研究这个,对现在的已有基础似乎没啥助力
解决方案五:
完全听不懂,汗一个!
解决方案六:
看你直接new感觉不太对啊,这样内存是不够用。考虑享元模式
解决方案七:
算法不复杂,关键是显示器不够大
解决方案八:
不要用控件,直接绘图,并且调用LockBits
解决方案九:
40亿你能看得完?、、、还特么不如直接打开ps调色板慢慢看个够
解决方案十:
这个不就是色环、调色板吗?有什么区别。
解决方案十一:
我觉得就算计算机的分辨率有这么高,我们的眼睛分辨率也跟不上啊,根本看不出来的
解决方案十二:
引用楼主flag5418的回复:

...我将亲自用程序绘制出40多亿的颜色...

一个颜色占4个字节,单单存放40多亿的颜色就要16G,还没算上40亿个Grid的内存占用。因此,一次性把所有的方块画出来是不实际的。要绘制40多亿的颜色还是可以的(这里不讨论显卡/显示器的颜色响应),条件就是每次只显示部分颜色。下例用了40个方块,但通过滚动条来显示40多亿的颜色(Grid加了背景图案,以便观察方块的透明度)。<Grid><Grid.Background><VisualBrushTileMode="Tile"Viewport="0,0,20,20"ViewportUnits="Absolute"Viewbox="0,0,20,20"ViewboxUnits="Absolute"><VisualBrush.Visual><Grid><PathData="M020L200"Stroke="Gray"/><PathData="M00L2020"Stroke="Gray"/></Grid></VisualBrush.Visual></VisualBrush></Grid.Background><Grid.ColumnDefinitions><ColumnDefinitionWidth="*"/><ColumnDefinitionWidth="auto"/></Grid.ColumnDefinitions><CanvasName="canvas"/><ScrollBarGrid.Column="1"Maximum="100000000"Scroll="scrollbar_Scroll"/></Grid>

publicpartialclassMainWindow:Window{publicMainWindow(){InitializeComponent();for(inti=0;i<BlocksPerLine*LinesPerPage;i++){Borderborder=newBorder(){Width=RectSize,Height=RectSize,BorderThickness=newThickness(1),BorderBrush=Brushes.Black};Canvas.SetLeft(border,(i%BlocksPerLine)*(double)BlockSize);Canvas.SetTop(border,(i/BlocksPerLine)*(double)BlockSize);border.Child=newTextBlock();this.canvas.Children.Add(border);}Layout(0);}privatevoidLayout(doublepercentage){uintoffset=(uint)(percentage*uint.MaxValue)/BlocksPerLine*BlocksPerLine;for(inti=0;i<this.canvas.Children.Count;i++){byte[]bs=BitConverter.GetBytes((uint)(offset+i));Colorcolor=Color.FromArgb(bs[3],bs[2],bs[1],bs[0]);Borderborder=this.canvas.Children[i]asBorder;border.Background=newSolidColorBrush(color);(border.ChildasTextBlock).Text=color.ToString();}}privatevoidscrollbar_Scroll(objectsender,System.Windows.Controls.Primitives.ScrollEventArgse){Layout(e.NewValue/(senderasSystem.Windows.Controls.Primitives.ScrollBar).Maximum);}constintRectSize=100,BlockSize=120,BlocksPerLine=4,LinesPerPage=10;}

时间: 2024-11-29 05:57:08

如何绘制40亿方块的相关文章

政府或出40亿资助国家网络公司

 业内人士透露,国家广电网络公司的组建方案目前已获批准,财政部将出资40亿元作为启动资金,而之前传言中的"运营商参与出资"并未实现.     据透露,国家广电网络公司将在今年年内正式挂牌成立,根据组建方案,财政部将出资40亿元作为启动资金.此前,国家广电总局曾提出由国家财政注资800亿元成立国网公司,但该方案被否决.     据悉,在国家广电网络公司成立之后,工信部将出台新修订的电信业务分类目录.届时,国家广电网络公司将获得工信部颁发的双向接入牌照,获准经营国内宽带接入服务.    

京东投40亿建两大云计算中心

为提升业务处理能力,京东商城近日与内蒙古自治区巴彦淖尔市和江苏省宿迁市相继签订了云计算中心项目的投资框架协议,投资总额高达40亿元.     据了解,京东商城在巴彦淖尔市建设的云计算数据中心规模巨大,计划总投资20亿元.其一期项目拟建4个云计算数据中心,容纳15-20万台服务器,将实现800PB的存储能力和1920THz的计算能力,同时预留5万台服务器运营空间作为后续升级储备.     京东商城与江苏省宿迁市人民政府近日也达成合作意向,京东商城计划在未来5年时间内,投资20亿元建设云计算中心.建

珠海破获特大网络赌博案 涉案金额40亿元

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断淘宝客 站长团购 云主机 技术大厅 首擒跨境赌博集团老板 本报珠海讯 (记者陈治家 通讯员陈恨绵)服务器在台湾.网站维护在香港,集团主要成员为港澳人士,参与赌博会员遍及港澳珠三角,一年之内涉案金额40亿元.昨日,珠海市公安局对外公布该局成功破获省公安厅督办的一宗特大跨境网络赌博案,抓获该赌博网站老板及主要高层代理人员5名,彻底摧毁"国际会"网站网络赌

核高基首批资金上弦:每年投放资金或超40亿

该项目将持续15年,加地方配套资金,每年投放资金或超40亿 ⊙本报记者 张韬 昨日,据业内知情人士向上海证券报透露,由工信部与科技部联合制定的核高基项目即将投放首批资金.该项目工信部已审批结束并提交给了科技部,等科技部审批完毕即可投放.另据工信部软件司的人士证实,申报核高基项目的企业名单基本已审核完毕. 中国软件协会理事长陈冲前不久曾透露,"核高基"项目第一批资金大概有三四十亿元.昨日,陈冲接受上海证券报记者采访时表示,按照国家相关政策的制定, "软件国产化"将是近

这个0day有点奇葩 利用它首先要做40亿次系统调用

本文讲的是这个0day有点奇葩 利用它首先要做40亿次系统调用,CVE-2016-0728是个Linux内核漏洞,本地用户可利用这个漏洞提升到root权限.研究人员认为,上千万台Linux个人电脑.服务器,以及66%的安卓手机和平板设备面临威胁.而且,这个漏洞已经存在3年了. 本地提权不稀罕,比较奇葩的是它的利用方式.用漏洞发现者 Perception Point 研究人员的话来说: 你一定得有耐心,因为必须要在内核循环一个32位的整数至0.也就意味着42.9亿次系统调用. 以下受影响的版本已发

编程-给定一个最多包含40亿个随机排列的32位整数的顺序文件,找出一个不在文件中的32位整数。

问题描述 给定一个最多包含40亿个随机排列的32位整数的顺序文件,找出一个不在文件中的32位整数. (在文件中至少缺失一个这样的数为什么?)括号里的话怎么得到的 在具有足够内存的情况下,如何解决该问题? 如果有几个外部的临时文件可以用,但是只有几百字节的内存,又该如何解决该问题. 解决方案 足够内存,用位图法.定义一个arr[4294967296]大小的数组,遍历顺序文件,遇到一个值,就把对应下标的置1,最后遍历这个数组,找0的元素. 解决方案二: 如果只有几百的内存,可以用hashtable.

GSM网络依然有40亿人口基数

GSM正在统治全世界,和CDMA的4.23亿人相比,GSM连接着世界40亿人口,这一数据来自3G Americas,该机构是一家促进GSM.GPRS.EDGE和UMTS技术互相无缝联接的商务组织. 据3G Americas称,绝大多数用户依然在使用第二代GSM,也就是我们说的2G网络,3G的WCDMA推广不是很顺利.虽然从GSM网络演变的 3G标准也将成为主导,而CDMA.iDEN.PDC和TDMA等技术都还要生存下去,特别是TD-SCDMA和CDMA 2000技术在中国刚刚开始商用,他们认为中

40亿美金的垄断生意:运动相机为什么只有GoPro做成了

 没有一家公司会站出来承认自己正经营一项垄断的业务,但几乎所有的公司都(暗自)期待自己的业务能在所在领域形成垄断(包括雷锋网(公众号:雷锋网)).传统行业的垄断意味着规模效应,互联网的竞争里垄断意味着圈住尽可能多的用户. 运动相机GoPro上周四上市,发行价24美金,目前是35.76美金,最高40.47美金:一度把30亿美金的IPO估值生生推到40亿. 运动相机起源于极限运动的拍摄需求.欧美两地极限运动普及,于是相机们开始慢慢集成固定.防抖.防水和通信手段,GoPro这样的形态就开始被人们认知并

远大世界第一高楼被指大跃进 称投资不低于40亿

在6月5日晚的签约仪式上,望城区委书记.区长谭小平说,J220项目落户望城,望城将建世界第一高楼,对于望城的发展具有跨时代意义,区委.区政府将排除万难.坚定不移地支持该项目的建设,建议项目命名为"远望大厦",象征远大和望城精诚合作,远望长沙.远望湖南.远望中国.远望世界. 世界第一高楼将落户长沙,7个月时间内将建成,吃.住.工作.读书.购物.就医可在这栋楼里一站式解决--这不是痴人说梦,这是6月5日晚,望城区政府与远大可建科技有限公司签订的一份战略协议. 6月7日下午,望城区透露,大楼