0

这是场景:在 Android 操作系统中加载图像 --> 将其转换为字节数组 --> 将其发送到基于 SWT 的应用程序 --> 将其加载到组件中(我不知道,标签、按钮......)。

我正确接收字节数组,但我无法解析它以转换为图像。

这是我在网上找到的唯一代码,它有效:

byte[] bs = { (byte) 0x11, (byte) 0x11, (byte) 0x11, (byte) 0x00, (byte) 0x00,
              (byte) 0x11, (byte) 0x11, (byte) 0x11, (byte) 0x11, (byte) 0x10, (byte) 0x00, (byte) 0x01,
              (byte) 0x10, (byte) 0x00, (byte) 0x01, (byte) 0x11, (byte) 0x11, (byte) 0x00, (byte) 0x22,
              (byte) 0x01, (byte) 0x10, (byte) 0x33, (byte) 0x00, (byte) 0x11, (byte) 0x10, (byte) 0x02,
              (byte) 0x22, (byte) 0x01, (byte) 0x10, (byte) 0x33, (byte) 0x30, (byte) 0x01, (byte) 0x10,
              (byte) 0x22, (byte) 0x22, (byte) 0x01, (byte) 0x10, (byte) 0x33, (byte) 0x33, (byte) 0x01,
              (byte) 0x10, (byte) 0x22, (byte) 0x22, (byte) 0x01, (byte) 0x10, (byte) 0x33, (byte) 0x33,
              (byte) 0x01, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
              (byte) 0x00, (byte) 0x00, (byte) 0x01, (byte) 0x11, (byte) 0x11, (byte) 0x01, (byte) 0x10,
              (byte) 0x11, (byte) 0x11, (byte) 0x10, (byte) 0x01, (byte) 0x11, (byte) 0x11, (byte) 0x01,
              (byte) 0x10, (byte) 0x11, (byte) 0x11, (byte) 0x10, (byte) 0x00, (byte) 0x00, (byte) 0x00,
              (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x10, (byte) 0x44,
              (byte) 0x44, (byte) 0x01, (byte) 0x10, (byte) 0x55, (byte) 0x55, (byte) 0x01, (byte) 0x10,
              (byte) 0x44, (byte) 0x44, (byte) 0x01, (byte) 0x10, (byte) 0x55, (byte) 0x55, (byte) 0x01,
              (byte) 0x10, (byte) 0x04, (byte) 0x44, (byte) 0x01, (byte) 0x10, (byte) 0x55, (byte) 0x50,
              (byte) 0x01, (byte) 0x11, (byte) 0x00, (byte) 0x44, (byte) 0x01, (byte) 0x10, (byte) 0x55,
              (byte) 0x00, (byte) 0x11, (byte) 0x11, (byte) 0x10, (byte) 0x00, (byte) 0x01, (byte) 0x10,
              (byte) 0x00, (byte) 0x01, (byte) 0x11, (byte) 0x11, (byte) 0x11, (byte) 0x11, (byte) 0x00,
              (byte) 0x00, (byte) 0x11, (byte) 0x11, (byte) 0x11, };*/

Color white = display.getSystemColor(SWT.COLOR_WHITE);
Color black = display.getSystemColor(SWT.COLOR_BLACK);
Color yellow = display.getSystemColor(SWT.COLOR_YELLOW);
Color red = display.getSystemColor(SWT.COLOR_RED);
Color green = display.getSystemColor(SWT.COLOR_GREEN);
Color blue = display.getSystemColor(SWT.COLOR_BLUE);
// Create a source ImageData of depth 4
PaletteData palette = new PaletteData(new RGB[] { black.getRGB(), white.getRGB(),
yellow.getRGB(), red.getRGB(), blue.getRGB(), green.getRGB() });



ImageData sourceData = new ImageData(16, 16, 4, palette, 1, b);

但是当我更改字节数组时不起作用。在这种情况下如何设置 PaletteData 和 ImageData?

4

3 回答 3

0
****It's work for me****

String filepath = "/sdcard/Image/Image01.jpg";
           File imagefile = new File(filepath);
            FileInputStream fis = null;
            try 
            {
                fis = new FileInputStream(imagefile);
            } 
            catch (FileNotFoundException e) 
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            Bitmap bm = BitmapFactory.decodeStream(fis);
            ByteArrayOutputStream baos = new ByteArrayOutputStream();  
            bm.compress(Bitmap.CompressFormat.PNG, 100 , baos);    
            byte[] b = baos.toByteArray(); 
            System.out.println(baos);
            Bitmap bm1=BitmapFactory.decodeByteArray(b,0, b.length);
            imgViewBitmap.setImageBitmap(bm1);
于 2012-12-29T03:48:01.930 回答
0

好的,正确的方法是:

contact.setImage(pCur.getBlob(0));
publishProgress("befor compress");
Bitmap image = BitmapFactory.decodeByteArray(contact.getImage(), 0, contact.getImage().length);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
image.compress(Bitmap.CompressFormat.JPEG, 50, stream); //JPEG or what you want
contact.setImage(stream.toByteArray());
stream.close();

无论如何我不能发送格式良好的字节数组。我发送约 1700 字节的字节数组,并接收约 2800 个元素的数组。我不知道为什么。我用 UTF-8 字符串编码。但是本地文件中的打印数组有效。

于 2012-09-28T16:34:58.187 回答
0

我认为您应该可以ImageIO.read用来解析图像:

InputStream in = new ByteArrayInputStream(imageDataByteArray);
BufferedImage bufImg = ImageIO.read(in);
ImageIcon icon = new ImageIcon(bufImg);
myButton.setIcon(icon);

作为BufferedImage的子类java.awt.Image,您应该能够按原样使用它。我自己没有测试过,但我不明白为什么它不起作用。

另请注意,您不能随机更改字节数组并期望它代表有效图像。如果您提供的数组不包含有效的图像数据(或包含不支持格式的图像),ImageIO.read将返回null. 查看ImageIO.read文档以获取更多信息。

于 2012-09-27T14:35:46.187 回答