Resource Management
HoneyGUI Visual Designer provides built-in resource conversion tools for converting images, 3D models, and other resources into binary formats supported by HoneyGUI. These tools are implemented in pure JavaScript/TypeScript, eliminating the need to install Python. For detailed usage, see VSCode Plugin Resource Conversion Tool.
Overview
The tools/ directory contains pure JavaScript/TypeScript implementations of HoneyGUI conversion tools, replacing the Python tools in the SDK.
Why JS Version?
Problems
Users need to install Python environment
Need to install numpy, PIL, pygltflib and other dependencies
Complex configuration across different systems
Performance overhead from Python interpreter startup
Solutions
✅ Pure JS/TS implementation, no Python required
✅ Self-contained plugin, works out of the box
✅ 25-40% performance improvement
✅ Unified tech stack, easier to maintain
Feature Comparison
Feature |
Python Version |
JS Version |
Status |
|---|---|---|---|
PNG → bin |
✅ |
✅ |
Complete |
JPEG → bin |
✅ |
✅ |
Complete |
RGB565 |
✅ |
✅ |
Complete |
RGB888 |
✅ |
✅ |
Complete |
ARGB8888 |
✅ |
✅ |
Complete |
ARGB8565 |
✅ |
✅ |
Complete |
A8 |
✅ |
✅ |
Complete |
OBJ Parsing |
✅ |
✅ |
Complete |
GLTF Parsing |
✅ |
✅ |
Complete |
RLE Compression |
✅ |
✅ |
Complete |
FastLZ Compression |
✅ |
✅ |
Complete |
YUV Compression |
✅ |
⏳ |
In Progress |
Tool Directory Structure
tools/
├── image-converter/ # Image conversion module
│ ├── compress/ # Compression algorithms
│ │ ├── base.ts # Compression base class
│ │ ├── fastlz.ts # FastLZ compression
│ │ ├── rle.ts # RLE compression
│ │ ├── yuv.ts # YUV sampling compression
│ │ └── index.ts # Exports
│ ├── types.ts # Format definitions
│ ├── headers.ts # Binary headers
│ ├── pixel-converter.ts # Pixel conversion
│ └── converter.ts # Main converter
├── model-converter/ # 3D model conversion module
│ ├── types.ts # Model types
│ ├── obj-parser.ts # OBJ parser
│ ├── obj-converter.ts # OBJ converter
│ ├── gltf-parser.ts # GLTF parser
│ └── gltf-converter.ts # GLTF converter
├── font-converter/ # Font conversion module
├── image-to-jpeg-converter/ # JPEG conversion module
├── glass-generator/ # Glass effect generator
├── video-converter-ts/ # Video conversion module
├── examples/ # Usage examples
├── tests/ # Test cases
└── index.ts # Unified exports
Image Resource Management
Supported Image Formats
Input Formats:
PNG (recommended)
JPEG/JPG
Output Formats:
RGB565 - 16-bit color, no transparency
RGB888 - 24-bit true color, no transparency
ARGB8888 - 32-bit true color, full transparency
ARGB8565 - 24-bit mixed format (RGB565 + 8-bit Alpha)
A8 - 8-bit grayscale/transparency
Image Conversion Workflow
Place image files (PNG/JPEG) in
assets/images/directoryAutomatically convert to
.binformat during project buildReference in HML:
src="assets/images/logo.bin"
Manual Image Conversion
Using in plugin:
import { ImageConverter, PixelFormat } from './tools';
// Create converter
const imageConverter = new ImageConverter();
// Convert image
await imageConverter.convert(
'assets/icon.png', // Input file
'build/assets/icon.bin', // Output file
'auto' // Auto format selection
);
// Convert with specific format
await imageConverter.convert(
'assets/logo.png',
'build/assets/logo.bin',
'ARGB8888' // Use 32-bit format
);
Pixel Format Selection Guide
Format |
File Size |
Use Cases |
|---|---|---|
RGB565 |
Smallest (2 bytes/pixel) |
Icons, backgrounds without transparency |
RGB888 |
Medium (3 bytes/pixel) |
High-quality images, no transparency needed |
ARGB8888 |
Largest (4 bytes/pixel) |
Icons, UI elements requiring transparency |
ARGB8565 |
Medium (3 bytes/pixel) |
Balance between transparency and file size |
A8 |
Smallest (1 byte/pixel) |
Monochrome icons, masks |
Tip
Use auto mode to let the converter automatically select the optimal format:
Has alpha channel → ARGB8888
No alpha channel → RGB565
3D Model Resource Management
Supported Model Formats
Currently Supported:
OBJ (Wavefront Object) - ✅ Implemented
MTL (Material Template Library) - ✅ Implemented
OBJ Model Conversion
OBJ conversion workflow:
Place
.objand.mtlfiles inassets/models/directoryAutomatically convert to HoneyGUI binary format during build
Generate
desc_{modelName}.binanddesc_{modelName}.txt
Manual OBJ conversion:
import { OBJConverter } from './tools';
// Create converter
const objConverter = new OBJConverter();
// Convert model
objConverter.convert(
'assets/model.obj', // Input OBJ file
'build/assets/desc_model.bin', // Output binary file
'build/assets/desc_model.txt' // Output text description
);
Model Optimization Recommendations
Vertex Count: Keep under 10,000 (embedded device limitation)
Face Count: Use triangles, avoid complex polygons
Materials: Use simple materials, avoid complex shaders
Textures: Compress texture images, use appropriate resolution
Font Resource Management
Font Formats
HoneyGUI supports the following font formats:
TTF (TrueType Font)
BIN (pre-converted binary font)
Font Conversion
Use HoneyGUI SDK font tools for conversion:
# Using SDK tools
cd /path/to/HoneyGUI/tool/font
python font_convert.py input.ttf output.bin --size 16
Note
Font conversion currently uses Python tools provided by the SDK. The VSCode plugin will integrate a JS version of the font converter in a future release.
Using fonts in HML:
<hg_text id="title" x="10" y="10" w="200" h="30"
text="Hello"
fontFamily="assets/fonts/arial_16.bin"
fontSize="16"/>
Resource Packaging
ROM File System
HoneyGUI uses ROM file system to manage resources:
Place all resources in
assets/directoryUse
mkromfstool to package during buildGenerate
root.binfile containing all resourcesEmbedded devices load from Flash
Packaging workflow:
# Automatic packaging (during build process)
cd win32_sim
scons
# Manual packaging
cd /path/to/HoneyGUI/tool/mkromfs
./mkromfs assets/ root.bin
Resource Path Conventions
Use relative paths when referencing resources in HML:
<!-- Correct -->
<hg_image src="assets/images/logo.bin"/>
<hg_text fontFamily="assets/fonts/arial.bin"/>
<hg_3d modelSrc="assets/models/cube.bin"/>
<!-- Incorrect - Don't use absolute paths -->
<hg_image src="/home/user/project/assets/images/logo.bin"/>
Performance Data
JS/TS tools vs Python tools performance comparison:
Operation |
Python |
JS/TS |
Improvement |
|---|---|---|---|
64x64 PNG → RGB565 |
50ms |
30ms |
40% |
OBJ Parsing (1000 vertices) |
80ms |
60ms |
25% |
Startup Time |
200ms |
5ms |
97% |
Usage Recommendations
Resource Optimization
-
Image Optimization:
Use appropriate resolution (avoid oversized images)
Choose correct pixel format
Consider using compression
-
Model Optimization:
Simplify geometry (reduce vertices and faces)
Use low-resolution textures
Remove unnecessary details
-
Font Optimization:
Only include needed character sets
Use appropriate font sizes
Consider using bitmap fonts instead of vector fonts
Resource Management Best Practices
Directory Organization: Classify resources by type (images/, models/, fonts/)
Naming Conventions: Use clear file names (logo.png, button_bg.png)
Version Control: Add source files (PNG, OBJ) to Git, add generated .bin files to .gitignore
Resource Manifest: Maintain resource list documentation recording purpose and format
Troubleshooting
Common Issues
Issue 1: Image conversion failed
Error: Failed to convert image
Solutions:
Check if image file is corrupted
Confirm file format (only PNG/JPEG supported)
Check file permissions
Issue 2: Model loading failed
Error: Failed to parse OBJ file
Solutions:
Check OBJ file syntax
Confirm MTL file path is correct
Validate vertex data integrity
Issue 3: Font display issues
Solutions:
Confirm font file format is correct
Check font file path
Validate character set includes needed characters
Debugging Tips
View conversion logs: Check console output during build
Verify binary files: Use hex editor to check file headers
Test small files: First test conversion workflow with small files
Compare output: Verify correctness by comparing with Python tool output
Next Steps
Learn Code Generation to understand how to use resources in code
See Build and Simulation to understand the complete build process
Refer to Embedded Deployment for resource deployment on embedded devices