【问题标题】:Native window rendering issue on Samsung Galaxy S3三星 Galaxy S3 上的原生窗口渲染问题
【发布时间】:2012-06-26 16:25:05
【问题描述】:

我正在使用 Skia(预构建)在一个 android 本机窗口中绘制,这是我从 Java 表面获得的。该代码在我可以测试的所有设备上都运行良好,除了三星 Galaxy S3(上面装有 android 4.0.4)。第一张图是我应该看到的,第二张图出现在 Galaxy S3 上:

绘制矩形的jni函数是:

JNIEXPORT void JNICALL Java_com_test_TestSkia_InitializeWindow(JNIEnv* env, jobject thiz, jobject surface)
{
     ANativeWindow* window = ANativeWindow_fromSurface(env, surface);
     ANativeWindow_Buffer buffer;
     ANativeWindow_lock(window, &buffer, NULL);
     SkBitmap  bitmap;
     bitmap.setConfig(convertPixelFormat(buffer.format), buffer.width, buffer.height);
     bitmap.setPixels(buffer.bits);
     SkCanvas canvas;
     canvas.setBitmapDevice(bitmap);
     SkRect rectRed;
     rectRed.setXYWH(30,30,400,700);
     SkPaint paint;
     paint.setColor(SK_ColorRED);
     canvas.drawRect(rectRed,paint);
     ANativeWindow_unlockAndPost(window);
}

我在以下设备上测试过,没有问题:

  • Sony X8 (android 2.3.7 自定义rom)
  • 三星 Nexus S (android 4.0.4)
  • 三星 Galaxy Tab 10.1 (android 3.2)
  • 三星 Galaxy S2 (android 2.3.5)
  • 模拟器(android 4.0.3,与 Galaxy S3 相同的屏幕尺寸和 dpi)

我尝试调用 ANativeWindow_setBuffersGeometry(window,0,0,0) 没有运气(无论如何,窗口锁定后缓冲区的尺寸和格式似乎没问题)。

到目前为止,只有 Galaxy S3 给我带来麻烦,此时我不知道该怎么办,我什至无法判断问题是与 ndk 原生窗口 api 还是与skia,或者它与使用 TouchWiz 的 Galaxy S3 相关...欢迎任何想法!

【问题讨论】:

    标签: android-ndk samsung-mobile skia


    【解决方案1】:

    您需要考虑buffer.stride。你的照片清楚地表明你有buffer.stride != buffer.width

    我无法测试,但可能以下更改就足够了:

     SkBitmap bitmap;
     SkBitmap::Config cfg = convertPixelFormat(buffer.format);
     bitmap.setConfig(cfg, buffer.width, buffer.height,
           SkBitmap::ComputeBytesPerPixel(cfg) * buffer.stride);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-08-28
      • 2012-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多