【问题标题】:AS3 AIR (ios and android) CameraRoll issueAS3 AIR(ios 和 android)CameraRoll 问题
【发布时间】:2023-03-07 23:32:01
【问题描述】:

我已经尝试解决一个问题一周左右了。谷歌搜索无济于事。我目前正在开发一款 iOS/Android 应用程序,该应用程序在游戏中具有截取屏幕截图并将其显示在移动设备图库中的功能。

我正在使用 CameraRoll 对象,问题是屏幕上的某些对象应用了平滑处理。然而,CameraRoll 屏幕截图忽略了这一点。这使得生成的屏幕截图有一些带有锯齿的对象。

我在谷歌搜索时发现很多人在同一问题上寻求帮助,但没有答案。

非常感谢任何帮助。

【问题讨论】:

  • 如果您不显示您的代码或问题图像,很难提供帮助
  • 不允许。根据保密协议。但是,我可以向您展示拍摄照片的那一行:[code] camRoll.addBitmapData(screenShot); [/code] camRoll 是一个 CameraRoll 对象,而 screenshot 是一个 BitmapData。编辑:我显然也不知道这个网站的代码标签:/
  • 我怀疑拍照的代码是否包含在 NDA 中 - 如果是,您刚刚在公共论坛上谈论它违反了 NDA。
  • 阅读所写的内容。我无法为我正在开发的尚未发布的游戏拍照。我也不能给出源代码。我喜欢我的工作并愿意保留它。此外,这有什么关系?我已经准确地解释了这个问题。屏幕截图中的某些对象使用平滑。 addBitmapData 方法会忽略平滑,因此会导致屏幕出现锯齿。我该如何克服。就是那个问题。提出这个问题并获得正确答案几乎不需要代码或屏幕截图。

标签: android ios actionscript-3 mobile air


【解决方案1】:

flash 中的锯齿很常见,因为默认情况下禁用位图平滑处理(更多 CPU 密集型)。我建议从 CameraRoll MediaEvent.SELECT 事件创建一个新位图。在内部,它应该返回event.data,即MediaPromise object。在其中,您应该可以找到一个只读的 file 属性,您应该可以在其中找到图像。

然后,只需使用平滑创建新图像即可。

var img:Bitmap = new Bitmap();
img.bitmapData = file.bitmapData;
img.smoothing = true;
addChild(img);

我以前从未在移动设备上尝试过这个,但我相信你遇到了it's a common issue


附录:

如果您对基于系统的屏幕截图服务有疑问,您可以使用纯 AS3 创建自己的屏幕截图服务。逻辑是,AS3 应该对舞台进行逐像素块复制(从而尊重图像的平滑值)。

试试这个:

var myBitmapData:BitmapData = new BitmapData(stage.stageWidth, stage.stageHeight);
myBitmapData.draw(stage);

【讨论】:

  • 我不确定这是否可行。如果我正确阅读了您的链接。 MediaEvent.SELECT 事件供用户从其图库中选择现有图像。而我正在拍摄游戏的快照并将其放入画廊。目前我正在传递一个 BitmapData,它复制了包含场景的影片剪辑的像素。一些子影片剪辑正在使用平滑,但它不是 BitmapData 的一部分,因为在绘制到屏幕时会应用平滑。所以生成的屏幕截图只有一些对象是锯齿状的(使用平滑的对象),而其他对象很好。
  • 如果不使用平滑,使用平滑的对象在游戏中会显得锯齿状。也许你的意思是我基​​本上做了2个屏幕截图?原始的带有锯齿,然后使用 MediaEvent.SELECT 回调来平滑它?...这不需要用户手动选择图像吗?
  • 看来我没有完全认识到您正在处理的问题(我的错)。我建议这样做:截屏时,保留一组应用了平滑的图像,并在截屏之前关闭平滑。截取屏幕截图后,重新应用它。或者,进行手动像素复制以创建您自己的屏幕截图。
  • 所以要重点指出您所说的:-使用平滑保留对象列表(方便我出于其他原因将它们放在列表中)-在屏幕截图之前,关闭每个对象的平滑-然后重新开始?还是打开整个屏幕截图?此外,我已经在进行像素复制以制作屏幕截图。不起作用的原因是平滑不是 BitmapData 的一部分。
  • 如果您从舞台上拉出图像,而不是位图本身,则应该对屏幕进行像素复制。那时,您正在处理的是合成图像,而不是位图的特定值。不幸的是,如果没有更多细节,我无法说出什么可以解决您的问题。由于这是您在 StackOverflow 上的第一篇文章,请考虑创建一个简洁的示例,您可以分享该示例来说明该问题。这样你会发现更好的反应。祝你好运。
猜你喜欢
  • 1970-01-01
  • 2011-05-05
  • 1970-01-01
  • 2013-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-27
  • 1970-01-01
相关资源
最近更新 更多