IplImageをImageに変換してJPanelに描画することもできるため、画像が有効であることが分かります。しかし、バイト配列をImageに変換すると、ほとんどの場合、Imageへの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;
}
}
}
今、あなたのいくつかは求めることができます。私はネットワークを介して送信する必要があります。注意する
エクストラもの:
- 例外が
- IplImageでは、有効なオブジェクト
でアップデートスローされていない:
を私が使用して試してみましたToolKitクラスを使用して、バイト配列からイメージを作成します。しかし、おそらくJPEGやGIFではないので失敗します。有効なImageオブジェクトを返しても、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)。 –