【问题标题】:Error on saving images保存图像时出错
【发布时间】:2014-07-22 16:55:49
【问题描述】:

我正在尝试将 MovieClip 的内容保存在 JPEG 图像中,但是当我保存它时,图像出现了这个问题:

其中有一个空格(从引用格式来看很明显),这出现在我尝试使用带有 JPGEncoder 的文件引用保存的所有图像中。

我认为问题可能是由于 JPGEncoder 类而发生的,但我不确定。

这是我用来保存图像的函数(一些字符串是葡萄牙语):

private function fl_Salvar(event:MouseEvent)
        {
            try
            {
                var src:BitmapData = new BitmapData(imageViewer.width,imageViewer.height);


                var mtx:Matrix = DisplayUtils.fitIntoRect(imageViewer.mcImage.getChildAt(0),rect,true,Alignment.MIDDLE,false);

                src.draw(imageViewer,mtx,null,null,null,true);

                var jpgEncoder:JPGEncoder = new JPGEncoder(85);
                var imgStream:ByteArray = null; 
                imgStream = jpgEncoder.encode(src);

                var file:FileReference = new FileReference();
                file.addEventListener( IOErrorEvent.IO_ERROR, ioErrorHandler );
                file.save( imgStream, "TESTE.jpg");
            }
            catch (ioe:IllegalOperationError)
            {
                trace("Operação Ilegal.");
            }
            catch (ae:ArgumentError)
            {
                trace("Argumento Inválido.");
            }
            catch (me:MemoryError)
            {
                trace("Memória Insuficiente.");
            }
            catch (error:Error)
            {
                trace("Erro ao tentar salvar imagem : "
                              + " . Erro : " + error);
            }
        }

        private function ioErrorHandler( event:IOErrorEvent ):void
        {
            trace("Handler de erro I/O: " + event);
        }

我想知道是否有人知道可能导致此问题的原因。 提前致谢。

编辑

这是我的 rect 声明:

rect = new Rectangle(imageViewer.mcImage.x,imageViewer.mcImage.y,imageViewer.mcImage.width,imageViewer.mcImage.height);

【问题讨论】:

    标签: image actionscript-3 image-processing jpeg filereference


    【解决方案1】:

    你确定不是你的图片查看软件在做这个吗?图像看起来很完整(它们从左上角到右下角逐个像素地写入 byteArray。)如果是文件流或字节数组是我希望看到失真图片的麻烦。

    实际上是缺少图像的一部分,还是完整的图像?

    【讨论】:

    • 图像已满...唯一的问题是右边的空白区域...我正在尝试一切以删除它但没有成功
    • 您只是将一个小图像放入一个大框架中。您的矩形是预定义的大小,但我看不到图像本身的实际来源。您可以将任何大小的图像绘制到 bitmapData 对象中,那些太大的会被剪掉,那些太小的会被渲染到原点,周围留下空白空间。查看 imageViewer 对象的来源。它很可能在实际添加任何图像之前明确设置尺寸。您需要根据图像调整查看器的大小,而不是简单地将图像放入预定义的框中。
    【解决方案2】:

    是因为这两行:

    var mtx:Matrix = DisplayUtils.fitIntoRect(imageViewer.mcImage.getChildAt(0),rect,true,Alignment.MIDDLE,false);
    src.draw(imageViewer,mtx,null,null,null,true);
    

    他们所做的是将您的图像放入一些 rect 中。您还没有提供信息什么是 rect 以及它是如何定义的,但我猜它有一些维度。所以你正在适应图像,它没有被拉伸,而是在较长的一侧调整大小。

    编码器效果很好,您只需要检查要适合图像的矩形即可。

    【讨论】:

    • 实际上我用 rect 声明编辑了我的答案,它应该具有正确的电影剪辑大小......这就是我不理解的 rect 有正确的大小,但图像没有.
    • 只跟踪fitIntoRect函数前后的大小。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多