7

私が苦労しているのは、GMSMapView(Google Maps SDK iOS)の任意の部分のスクリーンキャプチャを取得しようとしたときです。UIGraphicsGetImageFromCurrentImageContext()UIImage出力は表示されません。最終的に、GMSMapViewがOpenGLでレンダリングされることを発見しました。これを知って、私はglReadPixels()メソッドを使おうとしました。厄介なのは、iPhoneシミュレーターでマップスクリーンキャプチャをうまく取得できることですが、実際のデバイスで同じ方法を使用すると、それはまだ表示されません(iOS6)。

誰かが同じ問題に遭遇したのだろうか?私は調査の分担をしました。自分の状況に関連するものは何も見つかりませんでした。私が見つけた一般的なソリューションのほとんどは、CAEAGLLayer属性のいくつかを更新する必要があると言っていました。GMSMapViewによって適切なレイヤーを見つけることが制限されると思いましたが、以下に示すように、CAEAGLLayerを見つけて更新することができました。

[(CAEAGLLayer *)[[[mapView_ subviews] objectAtIndex:0] layer] setOpaque: NO];

[(CAEAGLLayer *)[[[mapView_ subviews] objectAtIndex:0] layer] setDrawableProperties:[NSDictionary dictionaryWithObjectsAndKeys: [NSNumber numberWithBool:YES],kEAGLDrawablePropertyRetainedBacking,kEAGLColorFormatRGBA8, kEAGLDrawablePropertyColorFormat,nil]];

フォーラムは、レイヤーのOPAQUE属性をNOに設定し、保持されたバッキングプロパティをYESに設定することで、iOS6の問題を軽減することを推奨しました。シミュレーターでは修正されましたが、デバイスでは修正されませんでした。

私が偶然見つけた最後の修正は、メインのOpenGLビューのpreserveBackBufferをYESに更新すると言われました。これが私の技術的専門知識が終わったところです。GMSMapViewのpreserveBackBuffer値をどこでどのように更新するかを見つけることができませんでした。これが私のスクリーンキャプチャの問題をすべて解決する修正だと思います。iOS6以降を実行しているデバイスの問題のみのようです。

この問題の回避策をテストした人はいますか?

4

2 に答える 2

6

iOS v1.1用のGoogleマップには、これを実現できるGMSScreenshotクラスがあります。

    UIImage* image = [GMSScreenshot screenshotOfMainScreen];

ただし、これはv1.2で削除されました。これは、標準のグラフィックスコンテキストメソッドを使用してマップレイヤーをキャプチャできるようになったためです。GMSMapViewが「self」のサブビューであると仮定します。

- (UIImage *)captureScreen {
    UIGraphicsBeginImageContextWithOptions(self.frame.size, YES, 0.0f);
    [self.layer renderInContext:UIGraphicsGetCurrentContext()];

    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return image;
}
于 2013-04-24T08:10:34.007 に答える
0

GMSMapViewのスクリーンキャプチャについて、Googleマップグループで問題を開きました。そして彼らは言った

1.1.0リリースでは、 GMSScreenshotscreenshotOfMainScreenを使用してこれが可能になると思います。

于 2013-02-25T10:17:26.640 に答える