Java中將圖片轉(zhuǎn)為二進制流只需要使用FileImageInputStream取得圖片文件,然后使用ByteArrayOutputStream 寫入到二進制流中即可,下面是詳細(xì)代碼:
目前成都創(chuàng)新互聯(lián)已為成百上千家的企業(yè)提供了網(wǎng)站建設(shè)、域名、虛擬空間、綿陽服務(wù)器托管、企業(yè)網(wǎng)站設(shè)計、大方網(wǎng)站維護等服務(wù),公司將堅持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
//圖片到byte數(shù)組
public?byte[]?image2byte(String?path){
byte[]?data?=?null;
FileImageInputStream?input?=?null;
try?{
input?=?new?FileImageInputStream(new?File(path));
ByteArrayOutputStream?output?=?new?ByteArrayOutputStream();
byte[]?buf?=?new?byte[1024];
int?numBytesRead?=?0;
while?((numBytesRead?=?input.read(buf))?!=?-1)?{
output.write(buf,?0,?numBytesRead);
}
data?=?output.toByteArray();
output.close();
input.close();
}
catch?(FileNotFoundException?ex1)?{
ex1.printStackTrace();
}
catch?(IOException?ex1)?{
ex1.printStackTrace();
}
return?data;
}
另外,如果需要將byte[]存回圖片或轉(zhuǎn)為String,則:
//byte數(shù)組到圖片
public?void?byte2image(byte[]?data,String?path){
if(data.length3||path.equals(""))?return;
try{
FileImageOutputStream?imageOutput?=?new?FileImageOutputStream(new?File(path));
imageOutput.write(data,?0,?data.length);
imageOutput.close();
System.out.println("Make?Picture?success,Please?find?image?in?"?+?path);
}?catch(Exception?ex)?{
System.out.println("Exception:?"?+?ex);
ex.printStackTrace();
}
}
//byte數(shù)組到16進制字符串
public?String?byte2string(byte[]?data){
if(data==null||data.length=1)?return?"0x";
if(data.length200000)?return?"0x";
StringBuffer?sb?=?new?StringBuffer();
int?buf[]?=?new?int[data.length];
//byte數(shù)組轉(zhuǎn)化成十進制
for(int?k=0;kdata.length;k++){
buf[k]?=?data[k]0?(data[k]+256):(data[k]);
}
//十進制轉(zhuǎn)化成十六進制
for(int?k=0;kbuf.length;k++){
if(buf[k]16)?sb.append("0"+Integer.toHexString(buf[k]));
else?sb.append(Integer.toHexString(buf[k]));
}
return?"0x"+sb.toString().toUpperCase();
}
上面通過比較把值進行換位
下面是直接把值賦予了
//Java為數(shù)組提供的排序方法
Arrays.sort(數(shù)組);升序
排好序后,倒序輸出就行了。假設(shè)數(shù)組為int[]a:
for(int i=a.length-1;i=0;i--){
System.out.println(a[i]);
}
個人見解,總體需要兩個二維數(shù)組(一個存儲正確圖片排列 Array1 String[][],一個隨機生成圖片排列Array2 String[][]),一個一維數(shù)組來存儲圖片的名稱Array3 String[],。
(1)如何實現(xiàn)圖片移動
使用帶圖片的按鈕(button =new button(getImage(Array[2][4]))),然后通過單擊事件來更改按鈕的圖片來源。 把被點擊的按鈕的圖片路徑更新到空白按鈕,并且把被點擊的按鈕圖片更新的成空白。其實就是變換兩個的二維數(shù)組成員的值。更新Array2中的值,然后重繪按鈕
如 Array[2][3]=“3.image”
Array[2][4]=“”
圖片3.image右移
Array[2][3]=“”
Array[2][4]=“3.image”
(2)如何判斷被單擊的網(wǎng)格與空白的網(wǎng)格是否相鄰
后臺使用一個二維數(shù)組Array2來做映射。通過二維數(shù)組的下標(biāo)來判斷,如Array[2][3]可以知道Array[2][4]是它右邊的那個。
(3)如何實現(xiàn)圖片的隨機擺放
比如有9個圖片,你可以命名1-9,然后初始化一個長度為9的一維String 數(shù)組Array3來存儲圖片的名稱,
使用隨機函數(shù)給二維數(shù)組Array2賦值,如Array2[2][3]=Array3[random()],這里要判斷這個圖片是否已被使用過,可以通過遍歷Array2來確定當(dāng)前Array3這個值是否已經(jīng)在Array2中了
最后通過Array1 和Array2來比較,用戶的拼圖是否正確。
語言組織能力有限。講不太清楚。
按照你的要求編寫的Java程序如下
public?class?A?{
public?static?void?main(String[]?args)?{
int?a[]={9,13,6,1,7};
int?b[]={11,3,15,8};
int?c[]=new?int[a.length+b.length];
int?count=0;
for(int?i=0;ia.length;i++){
if(a[i]10??a[i]%2==1){
c[count]=a[i];
count++;
}
}
for(int?i=0;ib.length;i++){
if(b[i]10??b[i]%2==1){
c[count]=b[i];
count++;
}
}
for(int?i=0;icount;i++){
System.out.print(c[i]+"?");
}
System.out.println();
}
}