우선이 주제에 관해 많은 예제를 읽었으므로 우선이 특정 질문을하고 있지만 실제로 도움이되지는 못합니다.바이트 배열을 bmp/jpeg 이미지로 변환/디스플레이
내 문제는 내가 변환하고 jpg 이미지를 표시하고 싶습니다. 원본 이미지가 없습니다. 서버에 있습니다. 데이터는 스트림 (소켓)을 통해 전달되며 바이트 배열로 제공됩니다. 이 바이트 배열에서 모든 4 바이트는 픽셀에 대한 정보를 나타냅니다. 나는 RGB를 가져 와서 bmp 이미지로 변환/저장했지만, jpg를 만드는 작업 솔루션을 찾을 수 없었습니다.
반면에 BMP가 있습니다. 어떻게 JLabel 또는 JPanel에서 표시 할 수 있습니까? 나는 또한 abou imageicon ImageIO 등을 읽었지만 그것은 나를 위해 작동하지 않습니다. 나는 ScheduleExecutorSystem btw를 사용한다. 어쩌면 그것이 문제일까요? 여기
인코더 코드입니다 (저작권 (C) 2013 필립 C. 헤켈) :public static void encodeToBitmap(byte[] srcBytes, OutputStream destStream)
throws IOException {
int imageWidth = 1024;
int imageHeight = 1080;
int imageBytes = imageWidth * imageHeight * 3;
int filesizeBytes = imageBytes + BMP_SIZE_HEADER;
byte[] header = BMP_HEADER.clone(); // Clone bitmap header template, and
// overwrite with fields
header = writeIntLE(header, BMP_OFFSET_FILESIZE_BYTES, filesizeBytes);
header = writeIntLE(header, BMP_OFFSET_IMAGE_WIDTH, imageWidth);
header = writeIntLE(header, BMP_OFFSET_IMAGE_HEIGHT, imageHeight);
header = writeIntLE(header, BMP_OFFSET_IMAGE_DATA_BYTES, 0);
header = writeIntLE(header, BMP_OFFSET_PAYLOAD_LENGTH,
(int) srcBytes.length);
// WRITE TO STREAM
// Add payload
destStream.write(header, 0, header.length);
for (int offset = imageBytes - imageWidth * 3; offset >= 0; offset -= imageWidth * 3) {
for (int i = 0; i < (imageWidth) * 3; i++) {
destStream.write(srcBytes[offset + i]);
}
}
destStream.close();
}
그리고 코드, 내가 그것을 사용하는 방법 :
BitmapEncoder.encodeToBitmap(RGBvalues, new FileOutputStream("path to file"));
RGBvalues - bytes of 3, with the RGB values (i don't say!! :P)
이미지의 폭과 높이 디버그 목적으로 수정되었습니다.
나는 JPanel과 JLabel을 가지고 있으며, JLabel에 기본 ImageIcon을 추가했습니다 (jpg 이미지), 그리고 그것은 잘 작동합니다. 내가 이미지를 저장 후, 나는 시도 :
이ImageIcon icon = new ImageIcon("path to file");
pictureLabel.setIcon(icon);
그것은 단지 사라질 기본을합니다. 나는 무언가를 놓는 것을 잊고 있니? 가장 빠른 방법인가요?
bmp로 변환 할 수있는 코드를 어디에 놓아 두지 않고 누락 된 부분을 더 명확하게 나타내야하는 이유는 무엇입니까? 또한 JLabel 또는 JPanel 및 해당 BMP 이미지로 무엇을하려합니다. –
['ImageIO'] (http://docs.oracle.com/javase/7/docs/api/javax/imageio/ImageIO.html)가 효과적이지 않으면 실제로 유효한 비트 맵이 없어야합니다 (BMP) 이미지. 데이터의 출처는 어디입니까? HTTP를 통해 나오고 있습니까? 그렇다면 헤더가 실제 형식을 알려줍니다. – DaoWen
아니요, TCP이고 높이 정보가 거기에서 읽을 수 있습니다. BMP로 괜찮은 이미지를 얻고 있습니다. – bajla