Apache flex Flex,JPEG按顺序编码两个位图时出现问题
我正在创建这个“绘图应用程序”,用户可以单击“预览”,它将获取他们制作的内容,绘制一个位图,然后我想将该位图拆分为左图像和右图像。我创建第一个位图,将其编码为jpeg,然后使用该位图使用copypixels剪切左右两侧。然后,我在一张画布上用中间的一个空间重新组合图像,并绘制该画布。那里一切正常 当我对新位图进行编码,然后将其保存时,保存的图像是空白的。到目前为止,我已经测试了一切,一切正常。我看到屏幕上的图像,我可以保存出第一个位图。。但是第二个总是空白的。这是一些示例代码,可能有人可以帮助我Apache flex Flex,JPEG按顺序编码两个位图时出现问题,apache-flex,flash,Apache Flex,Flash,我正在创建这个“绘图应用程序”,用户可以单击“预览”,它将获取他们制作的内容,绘制一个位图,然后我想将该位图拆分为左图像和右图像。我创建第一个位图,将其编码为jpeg,然后使用该位图使用copypixels剪切左右两侧。然后,我在一张画布上用中间的一个空间重新组合图像,并绘制该画布。那里一切正常 当我对新位图进行编码,然后将其保存时,保存的图像是空白的。到目前为止,我已经测试了一切,一切正常。我看到屏幕上的图像,我可以保存出第一个位图。。但是第二个总是空白的。这是一些示例代码,可能有人可以帮助我
_mainBmd = new BitmapData(_jacketWidth, _jacketHeight);
_mainBmd.draw(_imageHolder);
startEncode(_mainBmd);
private function startEncode(imageBitmapData:BitmapData):void
{
var encoder:JPEGAsyncEncoder = new JPEGAsyncEncoder(100);
encoder.PixelsPerIteration = 150;
encoder.addEventListener(JPEGAsyncCompleteEvent.JPEGASYNC_COMPLETE, encodeDone);
encoder.encode(imageBitmapData);
}
private function encodeDone(event:JPEGAsyncCompleteEvent):void
{
_leftBmd = new BitmapData(sideWidth, sideHeight);
var lRect:Rectangle = new Rectangle(0,0, sideWidth, sideHeight);
var lPoint:Point = new Point(0,0);
_leftBmd.copyPixels(_mainBmd, lRect, lPoint);
_rightBmd = new BitmapData(sideWidth, sideHeight);
var bWidth:Number = 200;
var sWidth:Number = 111;
var rRectWidth:Number = (bWidth/2 + sWidth) * Constants.print_dpi;
var rRect:Rectangle = new Rectangle(rRectWidth, 0, sideWidth, sideHeight);
var rPoint:Point = new Point(0, 0);
_rightBmd.copyPixels(_mainBmd, rRect, rPoint);
var lbm:Bitmap = new Bitmap(_leftBmd);
var rbm:Bitmap = new Bitmap(_rightBmd);
//now combine the two images into one holder with a space in the middle
//left Image
var l_Image:Image = new Image();
l_Image.source = lbm;
//right image
var r_Image:Image = new Image();
r_Image.source = rbm;
var newRender:Canvas = new Canvas();
newRender.clipContent = false;
newRender.minHeight = 0;
newRender.minWidth = 0;
newRender.addChild(l_Image);
r_Image.x = 500;
newRender.addChild(r_Image);
fcBMD = new BitmapData(renderW, renderH);
fcBMD.draw(newRender);
startEncode2(fcBMD);
}
private function startEncode2(imageBitmapData:BitmapData):void
{
var encoder:JPEGAsyncEncoder = new JPEGAsyncEncoder(100);
encoder.PixelsPerIteration = 150;
encoder.addEventListener(JPEGAsyncCompleteEvent.JPEGASYNC_COMPLETE, encode2Done);
encoder.encode(imageBitmapData);
}
private function encode2Done(event:JPEGAsyncCompleteEvent):void
{
_data = event.ImageData;
}
private function onSaveRenderClick(e:MouseEvent):void //save button listener
{
var fileRef:FileReference = new FileReference();
fileRef.addEventListener(Event.SELECT, onSaveComplete);
fileRef.save(_data, 'testImage.jpg');
}
有没有一个特殊的原因让你在创建画布支架和添加图像的所有循环中走回头路 为什么不直接在要编码的最终位图数据上使用copyPixels:
var backgroundColor:uint = 0xffffff;
fcBMD = new BitmapData(renderW, renderH, false, backgroundColor);
var lPoint:Point = new Point(0,0);
var lRect:Rectangle = new Rectangle(0,0, sideWidth, sideHeight);
fcBMD.copyPixels(_mainBmd, lRect, lPoint);
var rRect:Rectangle = new Rectangle(rRectWidth, 0, sideWidth, sideHeight);
var rPoint:Point = new Point(renderW - sideWidth, 0);
fcBMD.copyPixels(_mainBmd, rRect, rPoint);
startEncode2(fcBMD);
这主要是为了测试。我需要查看每个步骤的输出,以确保图像正确排列。起初我没有这样做,但当我没有得到任何输出时,我想我会将它们添加到画布中,这样我就可以确保它正确地创建了这些图像。那是。。。但编码后仍然没有输出。我可以很好地对_mainBmd进行编码,这是可行的,只是不是从中创建的第二个图像。我取出了所有的测试循环,并按照上面的建议简化了代码,现在它正在工作。我仍然不知道以前出了什么问题,因为我在舞台上看到了我想要创造的形象,它只是没有输出。。但是谢谢你的帮助。