将32位无符号字节数组保存到文件系统

谢恩·费舍尔(Shaine Fisher)

我正在尝试使用C#将(图像的)字节数组保存到文件系统,并且无法使用我尝试过的任何一种方法工作,这是代码示例1:

string path = @"c:\ppd" + g.ToString() + ".jpg";
        using (MemoryStream inputStream = new MemoryStream(image))
        {
            Image returnImage = Image.FromStream(inputStream);
            returnImage.Save(path, ImageFormat.Jpeg);
        }

使用此代码,将数据发送到服务时,我得到“参数无效”。因此,显然这是该数组的错误代码,因此我点击了google并提出了以下代码:

string path = @"c:\ppd\" + g.ToString() + ".jpg";
        using (MemoryStream inputStream = new MemoryStream(image))
        {
            using (Stream file = File.Create(path))
            {
                byte[] buffer = new byte[8 * 1024];
                int len;
                while ((len = inputStream.Read(buffer, 0, buffer.Length)) > 0)
                {
                    file.Write(buffer, 0, len);
                }
            }
        }

这段代码将文件写入文件系统,但是当您尝试打开它时,它会很有帮助地说:“这不是有效的位图文件,或者当前不支持其格式。

我们使用以下方法从Flex获取byteArray:

bitmapData.getPixels(0, 0, bitmapData.width, bitmapData.height);

bitmapData来自Android相机(通过Distriqt Camera ANE)。该图像在应用中显示正常,但是我不知道下一步该怎么做,请帮忙。

编辑:Flex中获取byteArray的代码是:

<s:BitmapImage id="bitmapImage" width="100%"
                 maxHeight="{this.height/2}" 
                 source="{profileModel.captureBitmapPreview}"
                 />

<s:Button click="{dispatchEvent(new PictureEvent
                      (PictureEvent.UPLOAD,
                      0, pictureModel.captureBitmapPreview.getPixels(new Rectangle(0,0,pictureModel.captureBitmapPreview.width,pictureModel.captureBitmapPreview.height))))}"/>
/* this is the alternative which still doesn't work **/
<s:Button click="{dispatchEvent(new PictureEvent
                      (PictureEvent.UPLOAD,
                      0, bitmapImage.getPixels(new Rectangle(0,0,bitmapImage.width,bitmapImage.height))))}"/>

PictureEvent具有3个参数,类型:字符串,id:int = 0,图像:ByteArray = null。

第二编辑:这是创建bitmapData的代码:

private function camera_capturedImageHandler(evt:CameraDataEvent):void
    {
        Camera.instance.setPresetMode(CameraMode.PRESET_MEDIUM);
        Camera.instance.addEventListener(CameraEvent.VIDEO_FRAME, camera_videoFrameHandler, false, 0, true);

        if (_captureBitmapData.width != evt.data.width || _captureBitmapData.height != evt.data.height)
        {
            _captureBitmapData = new BitmapData(evt.data.width, evt.data.height, false);
        }
        _captureBitmapData.draw(evt.data);
        var tbd:BitmapData = new BitmapData(FlexGlobals.topLevelApplication.width, FlexGlobals.topLevelApplication.height, false)
        tbd = applyOrientation(_bitmapData, "6");
        profileModel.captureBitmapPreview.copyPixels(tbd, new Rectangle(0, ((FlexGlobals.topLevelApplication.height/2)-(FlexGlobals.topLevelApplication.height/4)), FlexGlobals.topLevelApplication.width, FlexGlobals.topLevelApplication.height/2), new Point(0, 0));
    }

第三编辑:我进行了一些测试,发现此代码应该工作,这是上面第一个块的变体,抛出“参数无效”

ImageConverter imageConverter = new ImageConverter();
        Bitmap bm = (Bitmap)imageConverter.ConvertFrom(image);

        if (bm != null && (bm.HorizontalResolution != (int)bm.HorizontalResolution || bm.VerticalResolution != (int)bm.VerticalResolution))
        {
            bm.SetResolution((int)(bm.HorizontalResolution + 0.5f),(int)(bm.VerticalResolution + 0.5f));
        }

        bm.Save(path, ImageFormat.Jpeg);

所以现在我可以确定错误是出在byteArray上,但是我真的看不到我在做什么错。我有bitmapData并且它是有效的,并且看起来我正在收集所需的数据,写入的文件大小接近700Kb,但是出了点问题。如果有人能告诉我这个方程式在Flex方面出了什么问题,我将永远感激不已。我在显示列表上有BitmapImage,它已正确绑定到模型,并且我尝试了多种方法来指向源并绘制矩形。

谢恩·费舍尔(Shaine Fisher)

好的,@ Lorek是正确的,byteArray仅包含像素数据,而没有格式信息。我们不知道为什么会这样,但是基于该知识并在数据库中进行了一些挖掘,我意识到这种情况已经存在了一段时间,因此我需要一种可以解决该问题的解决方案。因此,回答“如何将像素数据从byteArray转换为图像?”这一问题得到了解答。我想出了这一点,仍然需要一点帮助,但是基本上这可以解决我遇到的问题(在代码之后提供更多信息)

Bitmap bitmap = new Bitmap(150, 150, PixelFormat.Format32bppRgb);
BitmapData bmData = bitmap.LockBits(new System.Drawing.Rectangle(0, 0, bitmap.Width, bitmap.Height), ImageLockMode.ReadWrite, bitmap.PixelFormat);
IntPtr pNative = bmData.Scan0;
Marshal.Copy(image, 0, pNative, image.Length);
bitmap.UnlockBits(bmData);
bitmap.Save(path, ImageFormat.Png);

因此,我在Flex中更改了Rectangle的大小,以便知道自己在使用什么,并将btyeArray发布到此方法,该方法为我编写了一个漂亮的PNG。

它略带蓝色,真的很蓝色,我不太确定为什么,请看一下:http : //ec2-52-89-85-67.us-west-2.compute.amazonaws.com/imagedata/ppd/ 3898ae89-e4e0-4d03-97d7-dac4e3b618d5.png应该是黑色的:http : //ec2-52-89-85-67.us-west-2.compute.amazonaws.com/imagedata/ppd/capture 。 png

因此,.NET小组的所有人都知道发生了什么事并可以向我提出建议(我听说某处需要切换颜色顺序,因此要代替rgb来切换颜色,但是我不知道这是怎么回事或为什么会成为问题)。

编辑这是解决问题的方法,它很慢,没有意义,而且花费的时间太长:http : //www.codeproject.com/Articles/2056/Image-Processing-for-Dummies-with-C-and-GDI-Part -3

或者,也许我们可以解决实际的Flex问题,尽管我完全放弃了SO对Flex支持有用的所有希望,但也许我们可以解决实际的Flex问题。

谢谢大家的耐心配合。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将 32 位无符号整数转换为大端字节数组的最稳定方法?

来自分类常见问题

将字节数组保存到文件

来自分类Dev

将字节数组保存到Scala中的Riak

来自分类Dev

字节数组的无符号(>>>)右移

来自分类Dev

将字节数组从Java保存到php中的图像文件

来自分类Dev

将 InkCanvas 保存到字节数组到文件时,图像被损坏

来自分类Dev

将无符号字节数组转换为Structs数组

来自分类Dev

Arduino声明无符号字节数组

来自分类Dev

Arduino声明无符号字节数组

来自分类Dev

将字节数组解码为最多 64 位的有符号整数

来自分类Dev

字节数组到文件对象而不保存到磁盘

来自分类Dev

将字节数组转换为位字节数组

来自分类Dev

将内存中的一个数据块保存到字节数组中,以便稍后从字节数组中恢复该块

来自分类Dev

在Powershell中是否可以将字节数组转换为8位有符号整数数组?

来自分类Dev

如何在文件上的C#和Java之间读取/写入无符号字节数组?

来自分类Dev

将字节数组转换为float32

来自分类Dev

计算无符号64位整数中的零半字节数

来自分类Dev

将字节数组中的文件写入zip文件

来自分类Dev

将字节数组中的文件写入zip文件

来自分类Dev

是否可以将pdf文档保存到字节数组(适用于Java的aspose.pdf)

来自分类Dev

通过使用时间戳命名它们无法将所有字节数组保存到png图片

来自分类Dev

位扩展字节数组

来自分类Dev

将字节数组转换为图像文件

来自分类Dev

将字节数组写入文件夹

来自分类Dev

以相反的顺序将文件转换为字节数组

来自分类Dev

将字节数组转换为大块文件

来自分类Dev

将字节数组写入文件夹

来自分类Dev

使用uri将文件读取到字节数组

来自分类Dev

将字节数组文件写入 OneDrive

Related 相关文章

  1. 1

    将 32 位无符号整数转换为大端字节数组的最稳定方法?

  2. 2

    将字节数组保存到文件

  3. 3

    将字节数组保存到Scala中的Riak

  4. 4

    字节数组的无符号(>>>)右移

  5. 5

    将字节数组从Java保存到php中的图像文件

  6. 6

    将 InkCanvas 保存到字节数组到文件时,图像被损坏

  7. 7

    将无符号字节数组转换为Structs数组

  8. 8

    Arduino声明无符号字节数组

  9. 9

    Arduino声明无符号字节数组

  10. 10

    将字节数组解码为最多 64 位的有符号整数

  11. 11

    字节数组到文件对象而不保存到磁盘

  12. 12

    将字节数组转换为位字节数组

  13. 13

    将内存中的一个数据块保存到字节数组中,以便稍后从字节数组中恢复该块

  14. 14

    在Powershell中是否可以将字节数组转换为8位有符号整数数组?

  15. 15

    如何在文件上的C#和Java之间读取/写入无符号字节数组?

  16. 16

    将字节数组转换为float32

  17. 17

    计算无符号64位整数中的零半字节数

  18. 18

    将字节数组中的文件写入zip文件

  19. 19

    将字节数组中的文件写入zip文件

  20. 20

    是否可以将pdf文档保存到字节数组(适用于Java的aspose.pdf)

  21. 21

    通过使用时间戳命名它们无法将所有字节数组保存到png图片

  22. 22

    位扩展字节数组

  23. 23

    将字节数组转换为图像文件

  24. 24

    将字节数组写入文件夹

  25. 25

    以相反的顺序将文件转换为字节数组

  26. 26

    将字节数组转换为大块文件

  27. 27

    将字节数组写入文件夹

  28. 28

    使用uri将文件读取到字节数组

  29. 29

    将字节数组文件写入 OneDrive

热门标签

归档