日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

自定義畫板數(shù)據(jù)的保存和讀取

系統(tǒng) 1981 0

??1.自定義隊列實現(xiàn)數(shù)據(jù)寫入文件,以及對該文件的讀取.

由于矩形,圓形,直線包括曲線,都是以對象的形式直接存放在自定義的隊列當中,而這個隊列又是存在內存當中.既然這個對象組成的隊列能夠存儲在內存里,如果能直接將這個對象隊列從內存里寫到文件中去,是不是也能實現(xiàn)保存一個由多個形狀組成的圖片?而當我再需要用到這個文件的時候,只需要將這個對象隊列讀取到內存中,而這些對象的方法,對我來說是透明的,所以我又能直接字再使用這些方法將這些對象還原成自定義畫板上的形狀..正是因為這個想法,我直接采用了對象類型的數(shù)據(jù)流來讀寫數(shù)據(jù).

????首先,我將這些形狀直接以對象的方式寫到文件中去.

    try {
				// 創(chuàng)建文件輸出流
				FileOutputStream fos = new FileOutputStream(filepath
						.getAbsolutePath());
				try {
					// 將文件輸出流包裝成對象類型的數(shù)據(jù)流
					ObjectOutputStream obs = new ObjectOutputStream(fos);
					// 保存隊列的長度.
					obs.writeInt(size);
					// 遍歷隊列
					for (int i = 0; i < size; i++) {
						Shape sh = shapearray.getSh(i);
						obs.writeObject(sh);
					}

					obs.flush();
					fos.close();

				} catch (IOException e) {
					e.printStackTrace();
				}

			} catch (FileNotFoundException e) {
				e.printStackTrace();
			}
  

?

?

??? 而當我要讀取這些文件的時候,又直接以對象的形式將其從文件中讀出

    try {

				// 創(chuàng)建文件輸出流
				FileInputStream fis = new FileInputStream(filepath
						.getAbsolutePath());
				try {
					// 將文件輸出流包裝成對象類型的數(shù)據(jù)流
					ObjectInputStream obi = new ObjectInputStream(fis);
					int len = obi.readInt();
					try {

						//將讀取到的對象存到隊列中
						ShapeArray<Shape> sh = new ShapeArray<Shape>();
						for (int i = 0; i < len; i++) {
							sh.addEmo((Shape)obi.readObject());
						}
						return sh;

					} catch (ClassNotFoundException e) {
						e.printStackTrace();
					}

				} catch (IOException e) {
					e.printStackTrace();
				}

			} catch (FileNotFoundException e) {
				e.printStackTrace();
			}
  

?

??? 讀出文件中的對象之后.就可以直接調用對象的方法來實現(xiàn)將其轉化成畫板上的形狀

    shapearray = array;
					// 將讀取得到的形狀對象畫出來
					for (int i = 0; i < shapearray.getlength(); i++) {
						Shape shape = shapearray.getSh(i);
						shape.draw(g);
					}
  

??? 通過對數(shù)據(jù)直接以對象形式的讀取完成了對自定義的畫板的數(shù)據(jù)的保存.

?

?

?

2.以位圖的方式存取

?一個圖片是由許許多多的點組成的,而這一個個的點就是所謂的像素點,即存儲的這個圖片的高度和寬度,所以,如果能夠得到每個點的顏色信息,再將這些點按照它們本來所在的位置輸?shù)狡聊簧?就完成這個圖片的存儲以及讀取.

??? 首先我們要得到每個點的顏色.可以用一個二維數(shù)組存儲這些顏色信息.

    try {
			robot = new Robot();
			wide = jp.getWidth();
			high = jp.getHeight();
			colors = new int[wide][high];
			Point p = jp.getLocationOnScreen();
			Rectangle rect = new Rectangle(p.x, p.y, wide, high);

			BufferedImage buffimg = robot.createScreenCapture(rect);

			for (int i = 0; i < colors.length; i++) {
				for (int j = 0; j < colors[i].length; j++) {
					colors[i][j] = buffimg.getRGB(i, j);
				}
			}
  

?

?

??? 其次,將這些顏色信息直接以基本數(shù)據(jù)類型的數(shù)據(jù)流寫入文件中去.這樣,便完成了一個圖片各點顏色的保存,而當我們又能再這些數(shù)據(jù)再還原成圖片,所以到這里完成了對這個圖片的保存.

    try {
				// 創(chuàng)建文件輸出流
				FileOutputStream fos = new FileOutputStream(
						filepath.getAbsolutePath());
				try {
					// 將文件輸出流包裝成基本數(shù)據(jù)類型的數(shù)據(jù)流
					DataOutputStream obs = new DataOutputStream(fos);
					// 保存圖片的寬度
					obs.writeInt(wide);
					// 保存圖片的高度
					obs.writeInt(high);

					// 遍歷數(shù)組,將各點的顏色信息寫入文件
					for (int i = 0; i < wide; i++) {
						for (int j = 0; j < high; j++) {
							obs.writeInt(color[i][j]);

						}
					}
					// 強制清空,保證數(shù)據(jù)全部寫入文件
					obs.flush();
					fos.close();

				} catch (IOException e) {
					e.printStackTrace();
				}

			} catch (FileNotFoundException e) {
				e.printStackTrace();
			}
  

??

?

??? 最后,只需要再將這些文件中的數(shù)據(jù)按照特定的方法還原成一個圖片,就實現(xiàn)了這個文件的讀取了.

    try {

				// 創(chuàng)建文件輸出流
				FileInputStream fis = new FileInputStream(
						filepath.getAbsolutePath());
				try {
					// 將文件輸出流包裝成基本數(shù)據(jù)類型的數(shù)據(jù)流
					DataInputStream obi = new DataInputStream(fis);
					int wide = obi.readInt();
					int high = obi.readInt();

					int color[][] = new int[wide][high];

					// 將讀取到的各點的顏色信息存入數(shù)組
					for (int i = 0; i < wide; i++) {
						for (int j = 0; j < high; j++) {
							color[i][j] = obi.readInt();
						}
					}

					fis.close();
					return color;

				} catch (IOException e) {
					e.printStackTrace();
				}

			} catch (Exception e) {
				e.printStackTrace();
			}
		}
  

?

?

?

?

?

?

?

?


自定義畫板數(shù)據(jù)的保存和讀取
?

自定義畫板數(shù)據(jù)的保存和讀取


更多文章、技術交流、商務合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 昆山市| 深圳市| 卢氏县| 泗水县| 天门市| 沧源| 天等县| 汾阳市| 虹口区| 海城市| 牙克石市| 朝阳县| 潮安县| 宜黄县| 鸡西市| 桃园县| 韶关市| 同江市| 永城市| 昔阳县| 乐业县| 琼中| 全椒县| 河东区| 确山县| 中山市| 宜州市| 崇左市| 老河口市| 泸溪县| 东阳市| 齐齐哈尔市| 依安县| 尚志市| 高台县| 都匀市| 青岛市| 泰来县| 房产| 时尚| 绩溪县|