IplImage를 Image로 변환하고 JPanel에 그릴 수 있기 때문에 이미지가 유효하다는 것을 알고 있습니다. 하지만 바이트 배열을 이미지로 변환 할 때 대부분의 경우 이미지에 대한 null 참조를 얻습니다. 아래에서이 코드를 보면서 내가 직면 한 것과 그림, 의견, 질문, 답변을 모두 환영하며 팁도 환영합니다.ImageIO.read가 때때로 100 % 유효 함에도 불구하고 null을 반환합니다.
Image i = Convert.getImage(image);
byte[] buffer = Convert.getBytes(image);
Image i2 = Convert.getImage(buffer);
//i2 is a null reference and i is a valid image. i can be drawn but i2 is useless.
변환 클래스 : 나는 바이트 배열로 필요 왜
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package Security;
import com.googlecode.javacv.cpp.opencv_core.IplImage;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.awt.image.DataBufferByte;
import java.io.ByteArrayInputStream;
import javax.imageio.ImageIO;
import javax.imageio.ImageReader;
/**
*
* @author danny
*/
public final class Convert
{
public static Image getImage(IplImage image)
{
return image.getBufferedImage();
}
public static byte[] getBytes(IplImage image)
{
byte[] buffer;
BufferedImage bI = image.getBufferedImage();
buffer = ((DataBufferByte) (bI).getRaster().getDataBuffer()).getData();
return buffer;
}
public static String getString(byte[] buffer)
{
return new String(buffer);
}
public static Image getImage(byte[] buffer)
{
try
{
Image i = ImageIO.read(new ByteArrayInputStream(buffer));
return i;
}
catch (Exception e)
{
System.out.printf("Exception Message:\n%s", e.getMessage());
return null;
}
}
}
이제 중 일부는 요청할 수 있습니다. 네트워크를 통해 전송해야하기 때문에.
추가 상황이 알아야 할 :
내가 사용 시도 : 예외가
- 은
이 업데이트 유효한 객체에게 있습니다 ToolKit 클래스는, 바이트 배열로부터 이미지를 생성합니다. 그러나 그것은 JPEG 또는 GIF가 아니기 때문에 아마도 실패합니다. 유효한 Image 객체를 반환하더라도 이미지 객체는 비어있는 이미지를 가리 킵니다. 다음은 사용하려고 시도했지만 그렇게하지 못한 코드입니다.
public static Image getImage(byte[] buffer)
{
try
{
Toolkit toolkit = Toolkit.getDefaultToolkit();
Image i = toolkit.createImage(buffer);
return i;
}
catch (Exception e)
{
System.out.printf("Exception Message:\n%s", e.getMessage());
return null;
}
}
거기에 '예외'가 있습니다. 어떤 행운을 잡는거야? 아무것도 인쇄합니까? –
예외가 발생하지 않습니다. 나는 아마 그것을 언급하는 것을 잊었다. –
'getString'은 어디에서나 작동하지 않습니다. OS 인코딩을 사용하고, UTF-8에서 깨고, String에 몇 가지 문제가 있습니다 (nul, lineendings). –