`
御天田
  • 浏览: 15256 次
  • 性别: Icon_minigender_2
文章分类
社区版块
存档分类

数组以及二维数组的重绘

阅读更多
               数组以及二维数组的重绘
一:数组
数组是相同类型的数据按顺序组成的一种复合数据类型。通过数组名加数组数组下标来使用数组中的数据。(注意:数组是线 性的一种数据存储结构,且下标从0开始)
1. 数据在java中是属于引用数据类型的,也可以理解成是一个对象,但是它只有一个属性和一个方法,就是长度length属性 和方法。怎样从数组中获得我们想要的数据呢?通过下面的例子我们可以得到答案:
int arr[]=new int[10];//声明一个长度为10、数据类型为int的数组
int i=arr[7];//得到下标为7的元素值(下标是从0开始的)
int len=arr.length();//数组唯一自带的方法,得到数组的长度---->length=10
2.二维数组
  二维数组也是一种线性存储结构,同一维数组一样,只有一个length属性和length方法
定义一个二维数组 int[][]arr=new int[5][5];//声明一个有5行5列的二维数组
int row=arr.length//得到此二维数组的行数
int col=arr[2].length;//得到第3行的总列数
int num=arr.length;//得到此二维数组的总元素个数
3.定义数组的格式
一维数组:
a.数据类型 [] 数组名 = new 数据类型[length];

b.数据类型 [] 数组名 = {数值,...};

c.数据类型 [] 数组名;
  数组名 = new 数据类型[length];

d.数据类型 [] 数组名 = new 数据类型[]{数值,...};(不常用)

e.数据类型 [] 数组名;
  数组名 = new 数据类型[]{数值,...};(不常用)

二维数组:
a.数据类型 [][] 数组名 = new 数据类型[行数][列数];

b.数据类型 [][] 数组名 = {{数值,...},...};

c.数据类型 [][] 数组名;
  数组名 = new 数据类型[行数][列数];

d.数据类型 [][] 数组名 = new 数据类型[][]{{数值,...},...};(不常用)

e.数据类型 [][] 数组名;
  数组名 = new 数据类型[][]{{数值,...},...};(不常用)
4.数组的优点和缺点
优点:
a.存储空间是连续的,可以通过索引去获取到对应位置的数据
b.可以指定空间存储的数据类型时特定的某一种,也可以再实例化数组的时候就指定数组能存储数据的个数。

缺点:
a.要存储的数据个数是不定的。
b.要存储的数据类型也不确定,如果碰到这样的问题,数组就无法解决,可以用自定义队列来实现。
二. 二维数组的重绘
重绘原理:
1.所有的图片都是一个个的像素点组成的,可以把一张图片看成是一个二维数组
2.得到一张图片,然后使用二维数组来存放图片中的每个像素点


重绘方法:
1.用Robot类中的creatScreenCapture()方法获取一张图片image(注:creatScreenCapture(rect)<------ Rectangle rect=new Rectangle((int)p.getX,(int)p.getY,width,height)//(int)p.getX),(int)p.getY面板相 对于屏幕的(x,y—)坐标width,height面板的宽度和高度<--------Point p=panel.getLocationOnScreen)
2.储存颜色值
  Color [][] colorArray = new Color[panel.width][panel.height];
如何知道像素点图片是由x和y坐标组成,每一个x和y组成的就是一个像素点,可以使用BufferedImage中的 getRGB(x,y);就可 以获取到一个颜色的int值,然后通过new Color(int)就可以得到颜色。


什么时候重绘:
因为当执行最小化等某些操作时,重新打开界面时,实际上已经重新执行了一次主函数,这样之前我们画的图像 并没有进行保存,所以.我们要在美执行完一次事件动作就得保存一次。在窗体重绘的时候,将之前所画的图形全部进行一 次重绘的操作,必须要重写窗体的重绘方法
public void paint(Graphics g){
//调用父类的paint方法
super.paint(g);
//遍历二维数组,将数组中的内容取出进行一次重绘操作。
}
注意:重绘方法将由java的内部机制进行调用,不需要我们手动调用。
分享到:
评论

相关推荐

    AndEngine二维数组地图

    本篇将深入探讨如何利用AndEngine的SpriteBatch机制来绘制基于二维数组的地图。 首先,理解二维数组在地图设计中的作用至关重要。二维数组通常被用来表示地图的格子结构,每个元素代表地图上的一个位置,可能包含...

    微信小程序——二维数组添加机柜页面.zip

    此外,考虑到状态管理,可以使用微信小程序的Page对象提供的data属性来存储二维数组,每次数组变化时,通过this.setData方法更新数据,这会触发页面的自动重绘。同时,为了防止数据错乱,应确保在并发操作(如多个...

    VC将二维数组显示为图像

    总结来说,将二维数组显示为图像涉及的主要知识点有:Windows编程基础,GDI接口的使用,位图对象的创建和管理,以及像素数据的处理。通过理解和掌握这些技术,开发者可以在VC++环境中轻松地实现图像的显示和处理。

    C#实现各种二维图形绘制

    为了防止图形在窗口重绘时闪烁,可以使用双缓冲技术。创建一个`Bitmap`对象,先在其上完成所有绘制操作,然后一次性将`Bitmap`内容绘制到`Graphics`对象上。这样可以显著减少闪烁现象: ```csharp private Bitmap ...

    简易二维CAD

    - 避免无效绘图:通过更新矩形和OnPrepareDC()函数,只重绘改变的部分,提高绘图效率。 - 多线程:在复杂计算或大量数据处理时,可以考虑使用多线程技术,提高用户体验。 总的来说,"简易二维CAD"项目是一个很好...

    C#GDI绘图,二维CAD 对绘出的图形的抓取

    本主题主要关注如何利用C#和GDI+来实现二维CAD(Computer-Aided Design)图形的绘制和抓取。 首先,了解C#中的GDI+绘图基础。GDI+提供了一系列类,如`Graphics`、`Pen`、`Brush`和`Shape`等,用于绘制线条、形状和...

    C#实现绘制二维曲线

    二维曲线的绘制通常涉及到数学知识,比如向量、矩阵运算以及数值积分。例如,贝塞尔曲线是一种常用的二维曲线,它通过控制点来定义曲线的形状。在C#中,我们可以使用Graphics类的DrawBezier方法来绘制一条贝塞尔曲线...

    C#画多条二维曲线C#画多条二维曲线

    在C#编程中,画多条二维曲线是一项常见的任务,特别是在数据可视化、科学计算或图形用户界面设计中。本文将详细讲解如何使用C#来绘制二维曲线,主要涉及以下知识点: 1. **GDI+图形库**:C#中用于绘制图形的核心库...

    交互式二维图形程序

    棋盘通常用二维数组表示,每个元素代表一个格子的状态(空、X或O)。当用户点击棋盘时,程序会计算出相应的棋盘坐标,更新状态数组,并重新绘制棋盘以显示新放置的棋子。 为了实现游戏逻辑,开发者需要编写一系列...

    二维魔方 BCB 源代码 C++

    这个压缩包中的源代码提供了一个使用BCB和C++编写的二维魔方实现,我们可以从中学到不少关于图形界面编程、算法设计以及对象导向编程的知识。 首先,BCB的VCL(Visual Component Library)框架允许开发者通过拖放...

    EVC 绘制二维曲线实例

    这可能需要在消息处理函数(如`WM_PAINT`)中实现,或者通过定时器触发重绘操作。 7. **数据结构和算法**:为了绘制曲线,需要有适当的数据结构存储曲线点,例如数组或链表。根据曲线的数学特性,可能需要使用特定...

    picturebox图片重绘.rar

    4. **定义刮除区域**:刮除区域可以用一个二维数组或List来表示,每个元素代表图片的一个像素是否被刮除。初始时,所有像素都被视为未刮除。 5. **重绘图像**:在Paint事件中,首先绘制背景图片。然后,遍历刮除...

    虚拟现实-镂垫-2维(C语言完成)

    6. **渲染优化**:即使在2D环境中,为了保持流畅的帧率,也需要考虑性能优化,如避免不必要的重绘、使用缓冲技术和适当的内存管理。 7. **数学基础**:理解向量和矩阵运算对于在2D空间中移动、旋转和缩放对象至关...

    基于OpenGL的二维汉字绘制

    窗口重绘函数 `OnReshape()`函数负责处理窗口尺寸变化时的调整。它设置了OpenGL的视口大小、投影矩阵以及模型视图矩阵。 ```c++ void OnReshape(int w, int h) { winWidth = w; winHeight = h; glViewport(0, 0...

    数组游戏之三——飞机大战

    - **屏幕输出**:使用`printf`函数进行屏幕输出,例如在`draw`函数中逐行打印二维数组`a`来展示游戏界面。 - **条件分支与循环控制**:利用`if`、`while`等控制结构实现游戏逻辑的控制流。 综上所述,“数组游戏之...

    C#中如何将combobox 显示项重绘为表格

    要实现多列布局,我们需要将数据存储在一个可以按行和列访问的数据结构中,如DataTable或二维数组。在OnDrawItem方法中,遍历每一行和每一列,根据数据绘制相应的单元格。 4. 表格样式: 为了模仿表格效果,可以...

    一首四句的古诗从右到左竖排输出

    在Windows系统中,WM_PAINT消息是用于窗口重绘的,当窗口部分或全部需要更新时,系统会发送这个消息。在这个场景中,每当接收到WM_PAINT消息,我们需要重新绘制古诗的文本。这通常涉及到BeginPaint和EndPaint函数的...

    二维 matlab 绘图的基本压缩算法:二维 matlab 绘图的基本压缩算法(使您的 LaTeX 文档的 eps 图像变小!)-matlab开发

    适用于2D matlab绘图的基本压缩算法(在您的LaTeX文档中导入小而整齐的eps图像!) 如果您希望每个像素的点密度很高,则需要绘制高度填充的向量,请使用它们。 *************************************... % 重文件h1 =

    计算机图形学上机实验3_实现二维图形的各种转换.pdf

    首先,实验中定义了两个二维图形的数据结构:一个表示正三角形的`OTriangle[4][3]`和一个表示直线的`OLine[4][3]`,每个数组元素是一个三维向量,其中第三个分量通常是1,用于齐次坐标系统。这种表示方法使得图形的...

    基于VC++与MATLAB混合编程的温度控制系统的模拟

    - **一维数组/二维数组**:为了存储动态曲线信息,可以使用一维数组或二维数组。如果需要在同一窗口中绘制多路数据曲线,则建议使用二维数组来存储这些数据。这样做的好处是可以方便地通过绘图函数来绘制数据曲线。 ...

Global site tag (gtag.js) - Google Analytics