PDA

View Full Version : [dis]



hcuong81
09-03-2003, 23:02
Xin chao !
Co ai do' co the giup minh duoc khong ?
Minh dang muon hien file anh trong java application nhung khi nap anh thay khong chay . Moi nguoi co the giup minh` voi' !
Chu thich' la khi nap anh chay trong Applet thi chay rat' tot' !
Xin cam on nhieu

quangvu
10-03-2003, 09:39
Bạn hãy xem lại đường dẩn của file ảnh xem ,có thể lỗi ở chỗ đó .
Bạn có thế Post đoạn nạp ảnh đó lên không ? Như vậy tiện cho việt Debug hơn !

hcuong81
10-03-2003, 11:49
Cam on ban da tra loi ,
Minh da nap anh rat dung duong dan vi` khi cho hien o Applet anh hien ra ro~ . Minh dang dinh dung doi tuong ImageProducer , va PixelGrabber de lay gia tri diem anh . Trong sach day thi cung chi thay ho lam` tren Applet .
Va lai minh` thay trong javax.swing ho khong ho~ tro ham` getDocumentBase() .
Ban co the giup minh nap anh va` lay' gia' tri diem anh ma` dung` duoc tren ung' dung khong ?
Cam' on nhieu !

winter20
10-03-2003, 20:51
Hi !
Về việc hiển thị ảnh trên Java Aplication không khó lắm đau vì nó cùng trên nguyên tắc với Applet . Ban nên dùng một đối tượng là image trong lớp Image của packet java.awt.* ; sau đó chỉ việc thiết lập hiển thị đối tượng đó trong panel là xong

Sau đây là đoạn chương trình minh hoạ :

JLabel logoimageposition;
.....
....
Icon logoimage = new ImageIcon("/đường dẫn chứa file hình ảnh cầnnạp ");
logoimagepostion = new JLabel(logoimage);
.....
....
panel.add(logoimageposition);

Vập là xong . Chỉ xin bạn nhớ dùng tool của Java là policy thiết lập thuộc tính cho hình ảnh nủa là xong
Chúc bạn vui vẻ

hcuong81
10-03-2003, 22:40
Chào bạn
Mình không có ý định đưa ảnh lên như vậy vì nếu như vậy thì đâu có gì đặc biệt đâu . Mình định đưa một ảnh ra để lấy giá trị từng điểm ảnh để xử lý . Phương thức lấy ảnh như sau dây :


originImage=getImage(getDocumentBase(),"test.bmp");
//Lay doi tuong ImageProducer tu anh goc
ImageProducer producer=originImage.getSource();
//Tao doi tuong ImageConsumer de lay du lieu tu Producer dua vao day pixs
PixelGrabber pg=new PixelGrabber(producer,0,0,w,h,pixs,0,w);
//Bat dau lay du lieu
try{
pg.grabPixels();
//System.out.print(pixs[1]);
}catch(InterruptedException e){
System.err.println("Error !");
return;
}

Việc xử lý trên Applet hoàn toàn bình thường . Chỉ có điều mình muốn chuyển sang Application thì không được . Mong bạn giúp .
Cảm ơn nhiều .

hcuong81
10-03-2003, 23:09
Đoạn code này mình dùng để tạo ảnh trên Application . Bạn xem hộ mình xem lỗi nằm ở đâu vậy ?

import java.awt.*;
import java.applet.*;
import java.awt.event.*;
import java.awt.image.*;

public class CompressImage extends Applet{
Image originImage;//Luu anh goc
int w=300;//Chieu rong
int h=300;//Chieu dai
int bitNumber=6;
//Vung nho de chua du lieu anh
int pixs[]=new int[w*h];

public void init(){
setLayout(null);//Thiet lap NullLayout
Button numberBit=new Button(" Number's Bit : ");//Nut chon so bit de luong tu hoa
numberBit.setBounds(10,10,70,30);
add(numberBit);

TextField textBit=new TextField("5",10);
textBit.setBounds(100,10,70,30);
add(textBit);
originImage=getImage(getDocumentBase(),"test.bmp");
//Lay doi tuong ImageProducer tu anh goc
ImageProducer producer=originImage.getSource();
//Tao doi tuong ImageConsumer de lay du lieu tu Producer dua vao day pixs
PixelGrabber pg=new PixelGrabber(producer,0,0,w,h,pixs,0,w);
//Bat dau lay du lieu
try{
pg.grabPixels();
//System.out.print(pixs[1]);
}catch(InterruptedException e){
System.err.println("Error !");
return;
}

}

public void paint(Graphics g){
g.drawImage(originImage,100,100,this);
}

public static void main(String args[]){
Frame myFrame;
myFrame=new Frame("Compress Image");
CompressImage app=new CompressImage();
myFrame.add(app);
myFrame.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent evt){
System.exit(0);
}});
myFrame.setSize(new Dimension(400,250));
myFrame.setVisible(true);
app.init();
app.start();
}
}

winter20
10-03-2003, 23:26
Mình chưa xem kĩ source code của bạn .Nhưng có một lối mình thay ngay đầu tiên là : bạn dùng hàm main để triệu gọi một đối tượng của lớp CompressImage mà trong khi lớp này kế thừa từ lớp JApplet là một sai lầm . Nếu bạn muốn làm như vậy thì trước tiên lớp CompressImage sẽ kế thừa từ lớp JFrame và bạn thay hàm init() bằng constructor của lớp này là xong . Bởi vì trong java làm sao bạn có thể chạy cùng lúc một Applet và một Aplication trong cùng một source code được . Không thể có cả hai hàm main và init được đâu . Mình sẽ xem kĩ lại xem còn lối nào nữa không .

hcuong81
11-03-2003, 10:54
Chào bạn,
Nếu như bạn bảo là việc đưa một đối tượng Applet vào trong frame là sai lầm thì mình lại không nghĩ vậy . Cũng với mã nguồn lần trước mình gửi nếu bạn bỏ đi phần nạp ảnh thì chạy trên ứng dụng là một điều bình thường . Bạn không tin có thể test thử . Việc gọi một đối tượng thuộc lớp Applet ( hôm trước là do mình viết nhầm JApplet , nhưng thật ra cũng chẳng hề gì vì với lớp Applet cũng bị lỗi mà ! :) ). Còn việc chuyển thành thừa kế của lớp Frame thì mình đã làm từ đầu rồi vì đó là cách chuyển thành ứng dụng cơ bản mà . Ai mà chẳng biết điều đó . Nhưng vấn đề ở chỗ là khi đó chương trình sẽ không nhận hàm : getDocumentBase() . Mình chẳng hiểu tại sao nữa . Khó hiểu hết sức !!!
Nếu có thể bạn có thể viết giúp mình đoạn chương trình nạp ảnh theo đối tượng Image , chứ không phải là đối tượng Icon . Vì cái mình cần không phải là để hiện ra màn hình .


lol