[√]freetype2 bitmap纹理转换

简介: [√]freetype2 bitmap纹理转换

QImage的坐标系

(0,0)-------
|           |
|           |
|           |
|           |
|--------(1,1)
int width = 20, height = 10;
int size = width * height;
unsigned char* buffer = (unsigned char*)malloc(size);
if (!buffer)
{
    return;
}
// 0黑色 255白色
memset(buffer, 0, size);
// 第一象限灰色
for (int i = 0;i < height / 2;i++)
{
    for (int j = 0;j < width / 2;j++)
    {
        buffer[i * width + j] = 100;
    }
}
view->showA8Texture(width, height, buffer, size);
free(buffer);

image.png

可以看到第一象限在左上角,符合坐标系的预期。

FT_Bitmap

FT_Bitmap的结构

typedef struct  FT_Bitmap_
{
unsigned int    rows;
unsigned int    width;
int             pitch;
unsigned char*  buffer;
unsigned short  num_grays;
unsigned char   pixel_mode;
unsigned char   palette_mode;
void*           palette;
} FT_Bitmap;

buffer指向的就是纹理内存,这个纹理内存的坐标系和QImage一致,都是左上角是(0,0)

image.png

cocos

cocos2dx 中对bitmap的纹理有个转换

// 绘制的起始坐标
int iX = posX;
int iY = posY;
for (long y = 0; y < bitmapHeight; ++y){
    long bitmap_y = y * bitmapWidth;
    for (int x = 0; x < bitmapWidth; ++x){
        unsigned char cTemp = bitmap[bitmap_y + x];
        // the final pixel
        int dest_idx = (iX + (iY * FontAtlas::CacheTextureWidth));
        dest[dest_idx] = cTemp;
        CCLOG("bitmap:%d => dest:%d", bitmap_y + x, dest_idx);
        iX += 1;
    }
    iX  = posX;
    iY += 1;
}
width:43, height:86
bitmap:0 => dest:513 = (1 + (1*512))
bitmap:1 => dest:514
bitmap:2 => dest:515
bitmap:3 => dest:516
bitmap:4 => dest:517
bitmap:5 => dest:518
bitmap:6 => dest:519
bitmap:7 => dest:520
bitmap:8 => dest:521
bitmap:9 => dest:522
bitmap:10 => dest:523
bitmap:11 => dest:524
bitmap:12 => dest:525
bitmap:13 => dest:526
bitmap:14 => dest:527
bitmap:15 => dest:528

把纹理copy到了大纹理里面,并且有(1,1)的偏移,从下图看的更加清晰: image.png

使用到QImage去查看纹理数据

不要被OpenGL的坐标系迷惑,engine会自动处理坐标系问题

目录
相关文章
|
6月前
|
存储 图形学
【unity小技巧】unity中导入下载的3D模型及albedo/baseColor、normal 、AO/Occlus、metallic、roughness贴图纹理设置
【unity小技巧】unity中导入下载的3D模型及albedo/baseColor、normal 、AO/Occlus、metallic、roughness贴图纹理设置
166 0
|
7月前
|
C++ 计算机视觉
[Qt5] 各种方式的图像读取,支持中文路径(Halcon)
[Qt5] 各种方式的图像读取,支持中文路径(Halcon)
162 0
[Qt5] 各种方式的图像读取,支持中文路径(Halcon)
[√]OpenGL绘制图片
[√]OpenGL绘制图片
118 0
FreeType像素格式:FT_PIXEL_MODE_MONO
FreeType像素格式:FT_PIXEL_MODE_MONO
145 0
|
机器学习/深度学习 索引 Windows
【OpenGL】十七、OpenGL 绘制四边形 ( 绘制 GL_QUAD_STRIP 模式四边形 )
【OpenGL】十七、OpenGL 绘制四边形 ( 绘制 GL_QUAD_STRIP 模式四边形 )
478 0
【OpenGL】十七、OpenGL 绘制四边形 ( 绘制 GL_QUAD_STRIP 模式四边形 )
不同字体的绘制【OpenGL】【FreeType】
不同字体的绘制【OpenGL】【FreeType】
155 0
不同字体的绘制【OpenGL】【FreeType】
|
Python
Halcon读取dxf文件生成xld,然后实现点坐标遍历/缩放/镜像/求最大面积等操作(★firecat推荐★)
Halcon读取dxf文件生成xld,然后实现点坐标遍历/缩放/镜像/求最大面积等操作(★firecat推荐★)
685 0
|
存储 Java 数据处理
【Android 内存优化】Android 工程中使用 libjpeg-turbo 压缩图片 ( JNI 传递 Bitmap | 获取位图信息 | 获取图像数据 | 图像数据过滤 | 释放资源 )
【Android 内存优化】Android 工程中使用 libjpeg-turbo 压缩图片 ( JNI 传递 Bitmap | 获取位图信息 | 获取图像数据 | 图像数据过滤 | 释放资源 )
429 0
|
机器学习/深度学习 API Android开发