??1.自定義隊列實現數據寫入文件,以及對該文件的讀取.
由于矩形,圓形,直線包括曲線,都是以對象的形式直接存放在自定義的隊列當中,而這個隊列又是存在內存當中.既然這個對象組成的隊列能夠存儲在內存里,如果能直接將這個對象隊列從內存里寫到文件中去,是不是也能實現保存一個由多個形狀組成的圖片?而當我再需要用到這個文件的時候,只需要將這個對象隊列讀取到內存中,而這些對象的方法,對我來說是透明的,所以我又能直接字再使用這些方法將這些對象還原成自定義畫板上的形狀..正是因為這個想法,我直接采用了對象類型的數據流來讀寫數據.
????首先,我將這些形狀直接以對象的方式寫到文件中去.
try { // 創建文件輸出流 FileOutputStream fos = new FileOutputStream(filepath .getAbsolutePath()); try { // 將文件輸出流包裝成對象類型的數據流 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 { // 創建文件輸出流 FileInputStream fis = new FileInputStream(filepath .getAbsolutePath()); try { // 將文件輸出流包裝成對象類型的數據流 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(); }
?
??? 讀出文件中的對象之后.就可以直接調用對象的方法來實現將其轉化成畫板上的形狀
shapearray = array; // 將讀取得到的形狀對象畫出來 for (int i = 0; i < shapearray.getlength(); i++) { Shape shape = shapearray.getSh(i); shape.draw(g); }
??? 通過對數據直接以對象形式的讀取完成了對自定義的畫板的數據的保存.
?
?
?
2.以位圖的方式存取
?一個圖片是由許許多多的點組成的,而這一個個的點就是所謂的像素點,即存儲的這個圖片的高度和寬度,所以,如果能夠得到每個點的顏色信息,再將這些點按照它們本來所在的位置輸到屏幕上,就完成這個圖片的存儲以及讀取.
??? 首先我們要得到每個點的顏色.可以用一個二維數組存儲這些顏色信息.
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); } }
?
?
??? 其次,將這些顏色信息直接以基本數據類型的數據流寫入文件中去.這樣,便完成了一個圖片各點顏色的保存,而當我們又能再這些數據再還原成圖片,所以到這里完成了對這個圖片的保存.
try { // 創建文件輸出流 FileOutputStream fos = new FileOutputStream( filepath.getAbsolutePath()); try { // 將文件輸出流包裝成基本數據類型的數據流 DataOutputStream obs = new DataOutputStream(fos); // 保存圖片的寬度 obs.writeInt(wide); // 保存圖片的高度 obs.writeInt(high); // 遍歷數組,將各點的顏色信息寫入文件 for (int i = 0; i < wide; i++) { for (int j = 0; j < high; j++) { obs.writeInt(color[i][j]); } } // 強制清空,保證數據全部寫入文件 obs.flush(); fos.close(); } catch (IOException e) { e.printStackTrace(); } } catch (FileNotFoundException e) { e.printStackTrace(); }
??
?
??? 最后,只需要再將這些文件中的數據按照特定的方法還原成一個圖片,就實現了這個文件的讀取了.
try { // 創建文件輸出流 FileInputStream fis = new FileInputStream( filepath.getAbsolutePath()); try { // 將文件輸出流包裝成基本數據類型的數據流 DataInputStream obi = new DataInputStream(fis); int wide = obi.readInt(); int high = obi.readInt(); int color[][] = new int[wide][high]; // 將讀取到的各點的顏色信息存入數組 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(); } }
?
?
?
?
?
?
?
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

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