diff --git "a/ohos/docs/04_development/Flutter OHOS\345\244\226\346\216\245\347\272\271\347\220\206\347\254\254\344\270\200\345\270\247\357\274\210\350\203\214\346\231\257\357\274\211\350\207\252\345\256\232\344\271\211.md" "b/ohos/docs/04_development/Flutter OHOS\345\244\226\346\216\245\347\272\271\347\220\206\347\254\254\344\270\200\345\270\247\357\274\210\350\203\214\346\231\257\357\274\211\350\207\252\345\256\232\344\271\211.md" index d1c1edc69e5bf2e5dc666cdae6695ce07b4f28e4..b5952316247ec0906f6f023fe9f25a511c103589 100644 --- "a/ohos/docs/04_development/Flutter OHOS\345\244\226\346\216\245\347\272\271\347\220\206\347\254\254\344\270\200\345\270\247\357\274\210\350\203\214\346\231\257\357\274\211\350\207\252\345\256\232\344\271\211.md" +++ "b/ohos/docs/04_development/Flutter OHOS\345\244\226\346\216\245\347\272\271\347\220\206\347\254\254\344\270\200\345\270\247\357\274\210\350\203\214\346\231\257\357\274\211\350\207\252\345\256\232\344\271\211.md" @@ -66,8 +66,8 @@ flutterRenderer.setTextureBackGroundColor(textureId, 0xFF0000FF); 在此示例中,背景颜色被设置为红色 (`0xFF0000FF`),这意味着: - `FF` 是 Alpha 值,表示完全不透明。 -- `00` 是绿色分量,表示没有绿色。 - `00` 是蓝色分量,表示没有蓝色。 +- `00` 是绿色分量,表示没有绿色。 - `FF` 是红色分量,表示最大红色。 ### 设置背景图像为视频的第一帧 @@ -109,24 +109,51 @@ flutterRenderer.setTextureBackGroundPixelMap(textureId, pixelMap); // 第一帧 ```dart if (asset != null) { + Log.i(TAG, "asset create called, asset is" + asset); let avMetaExtractor = await media.createAVMetadataExtractor(); avMetaExtractor.fdSrc = await this.getContext().resourceManager.getRawFd("flutter_assets/" + asset); let mateData = await avMetaExtractor.fetchMetadata(); if (mateData.hasVideo == CommonConstants.YES) { let avImageGenerator = await media.createAVImageGenerator(); + Log.i(TAG, "asset video create"); avImageGenerator.fdSrc = await this.getContext().resourceManager.getRawFd("flutter_assets/" + asset); let pixelMap = await avImageGenerator.fetchFrameByTime(0, media.AVImageQueryOptions.AV_IMAGE_QUERY_NEXT_SYNC, { width: -1, height: -1 }); - flutterRenderer.setTextureBackGroundPixelMap(textureId, pixelMap); + this.pixelMaps.set(JSON.stringify(arg), pixelMap); + avImageGenerator.release(); + flutterRenderer.setTextureBackGroundPixelMap(textureId, this.pixelMaps.get(JSON.stringify(arg))); + } + avMetaExtractor.release(); +} else if (uri != null && uri.startsWith("fd://")) { + Log.i(TAG, "local create called, file is" + uri); + let avMetaExtractor = await media.createAVMetadataExtractor(); + avMetaExtractor.fdSrc = { + fd: Number.parseInt(uri.replace("fd://", "")) + }; + let mateData = await avMetaExtractor.fetchMetadata(); + if (mateData.hasVideo == CommonConstants.YES) { + let avImageGenerator = await media.createAVImageGenerator(); + Log.i(TAG, "local video create"); + avImageGenerator.fdSrc = { + fd: Number.parseInt(uri.replace("fd://", "")) + }; + let pixelMap = await avImageGenerator.fetchFrameByTime(0, media.AVImageQueryOptions.AV_IMAGE_QUERY_NEXT_SYNC, { + width: -1, + height: -1 + }); + this.pixelMaps.set(JSON.stringify(arg), pixelMap); avImageGenerator.release(); + flutterRenderer.setTextureBackGroundPixelMap(textureId, this.pixelMaps.get(JSON.stringify(arg))); } avMetaExtractor.release(); } +flutterRenderer.setTextureBackGroundColor(textureId, 0xFF0000FF); // 新增代码,展示setTextureBackGroundColor用法,设置红色背景 ``` -在这里,`flutterRenderer.setTextureBackGroundPixelMap(textureId, pixelMap)` 会将从视频资源中提取的第一帧图像设置为纹理的背景。 +在这里`flutterRenderer.setTextureBackGroundPixelMap(textureId, pixelMap)` 会将从视频资源中提取的第一帧图像设置为纹理的背景。 +新增的`flutterRenderer.setTextureBackGroundColor(textureId, 0xFF0000FF)` 会将从红色设置为纹理的背景色。 ## 注意事项 - **纹理 ID**: 确保在调用这些方法之前已经为纹理分配了有效的 `textureId`。 diff --git a/ohos/docs/04_development/external-texture-first-frame-(background)-customization-for-flutter.md b/ohos/docs/04_development/external-texture-first-frame-(background)-customization-for-flutter.md index 6290c27bdd6b34b3a6e7988182cd02b154a5ec1e..a531fb637bd877f924c347232e8f300588764c8c 100644 --- a/ohos/docs/04_development/external-texture-first-frame-(background)-customization-for-flutter.md +++ b/ohos/docs/04_development/external-texture-first-frame-(background)-customization-for-flutter.md @@ -66,8 +66,8 @@ flutterRenderer.setTextureBackGroundColor(textureId, 0xFF0000FF); In this example, the background color is set to red (`0xFF0000FF`), meaning: - `FF` is the Alpha value, indicating fully opaque. -- `00` is the green component, indicating no green. - `00` is the blue component, indicating no blue. +- `00` is the green component, indicating no green. - `FF` is the red component, indicating maximum red. ### Set Background Image to the First Frame of the Video @@ -109,24 +109,51 @@ In the third-party library [video_player_ohos](https://gitee.com/openharmony-sig ```dart if (asset != null) { + Log.i(TAG, "asset create called, asset is" + asset); let avMetaExtractor = await media.createAVMetadataExtractor(); avMetaExtractor.fdSrc = await this.getContext().resourceManager.getRawFd("flutter_assets/" + asset); let mateData = await avMetaExtractor.fetchMetadata(); if (mateData.hasVideo == CommonConstants.YES) { let avImageGenerator = await media.createAVImageGenerator(); + Log.i(TAG, "asset video create"); avImageGenerator.fdSrc = await this.getContext().resourceManager.getRawFd("flutter_assets/" + asset); let pixelMap = await avImageGenerator.fetchFrameByTime(0, media.AVImageQueryOptions.AV_IMAGE_QUERY_NEXT_SYNC, { width: -1, height: -1 }); - flutterRenderer.setTextureBackGroundPixelMap(textureId, pixelMap); + this.pixelMaps.set(JSON.stringify(arg), pixelMap); + avImageGenerator.release(); + flutterRenderer.setTextureBackGroundPixelMap(textureId, this.pixelMaps.get(JSON.stringify(arg))); + } + avMetaExtractor.release(); +} else if (uri != null && uri.startsWith("fd://")) { + Log.i(TAG, "local create called, file is" + uri); + let avMetaExtractor = await media.createAVMetadataExtractor(); + avMetaExtractor.fdSrc = { + fd: Number.parseInt(uri.replace("fd://", "")) + }; + let mateData = await avMetaExtractor.fetchMetadata(); + if (mateData.hasVideo == CommonConstants.YES) { + let avImageGenerator = await media.createAVImageGenerator(); + Log.i(TAG, "local video create"); + avImageGenerator.fdSrc = { + fd: Number.parseInt(uri.replace("fd://", "")) + }; + let pixelMap = await avImageGenerator.fetchFrameByTime(0, media.AVImageQueryOptions.AV_IMAGE_QUERY_NEXT_SYNC, { + width: -1, + height: -1 + }); + this.pixelMaps.set(JSON.stringify(arg), pixelMap); avImageGenerator.release(); + flutterRenderer.setTextureBackGroundPixelMap(textureId, this.pixelMaps.get(JSON.stringify(arg))); } avMetaExtractor.release(); } +flutterRenderer.setTextureBackGroundColor(textureId, 0xFF0000FF); // New code, demonstrating the usage to set the red background ``` -Here, `flutterRenderer.setTextureBackGroundPixelMap(textureId, pixelMap)` sets the first frame image extracted from the video resource as the texture background. +Here, `flutterRenderer.setTextureBackGroundPixelMap(textureId, pixelMap)` sets the first frame image extracted from the video resource as the background of the texture. +The newly added `flutterRenderer.setTextureBackGroundColor(textureId, 0xFF0000FF)` sets the background color of the texture to red. ## Notes - **Texture ID**: Ensure that the texture has a valid `textureId` before calling these methods.