首先,即時通訊問這個具體的問題,因爲我已經閱讀了很多關於這個主題的例子,但沒有一個真的有幫助。轉換/顯示字節數組到bmp/jpeg圖像
我的問題是,我想轉換並顯示一個jpg圖像。我沒有原始圖像,它在服務器上。數據通過流(套接字)傳入,並以字節數組形式給出。在這個字節數組中,每4個字節代表一個像素的信息。我設法得到RGBs和轉換/保存到一個BMP圖像,但我找不到一個工作解決方案,使JPG。
另一方面,我有一個BMP :)如何顯示它在JLabel或JPanel?我也讀過imageou 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,我添加了一個默認的ImageIcon JLabel(一個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