[√]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会自动处理坐标系问题

目录
相关文章
|
人工智能 自然语言处理 IDE
通义灵码使用指南
一款不用充钱也能让你变强的插件 通义灵码(TONGYI Lingma),可以称之为中国copilot 的平替品。我们一起看看如何使用安装,功能介绍,常用问题,客户测评等。
8262 12
通义灵码使用指南
|
人工智能 Kubernetes 监控
Kubernetes 故障诊断 AI 助手
【10月更文挑战第6天】
464 1
|
9月前
|
人工智能 Java 程序员
Java程序员在AI时代必会的技术:Spring AI
在AI时代,Java程序员需掌握Spring AI技术以提升竞争力。Spring AI是Spring框架在AI领域的延伸,支持自然语言处理、机器学习集成与自动化决策等场景。它简化开发流程,无缝集成Spring生态,并提供对多种AI服务(如OpenAI、阿里云通义千问)的支持。本文介绍Spring AI核心概念、应用场景及开发步骤,含代码示例,助你快速入门并构建智能化应用,把握AI时代的机遇。
1890 61
|
机器学习/深度学习 人工智能 自然语言处理
AI技术在智能客服中的应用:重塑客户体验
AI技术在智能客服中的应用:重塑客户体验
|
机器学习/深度学习 人工智能 测试技术
阿里云百炼已上线超强推理开源模型QwQ-32B,尺寸更小,性能比肩DeepSeek满血版
通义千问团队推出了320亿参数的QwQ-32B模型,通过大规模强化学习和多阶段训练,在数学、编程及通用能力上达到或超越了DeepSeek-R1等先进模型。QwQ-32B模型已在阿里云百炼上线,支持API调用,用户可通过官方文档了解详细使用方法。未来,团队将继续探索智能体与RL集成,推动人工通用智能的发展。
9341 0
|
Unix Linux
linux中在进程之间传递文件描述符的实现方式
linux中在进程之间传递文件描述符的实现方式
|
存储 负载均衡 API
OpenStack核心组件Keystone
【8月更文挑战第3天】
1001 8
|
JSON 前端开发 搜索推荐
Laravel系列开源Dcat admin礼盒商城后台管理项目
Laravel系列开源Dcat admin礼盒商城后台管理项目
644 0
|
安全 算法 Java
Java中的多线程编程及其优化策略
【2月更文挑战第9天】在当今高度并发的技术环境下,多线程编程成为了Java开发中不可忽视的一部分。本文将介绍Java中多线程编程的基本概念和核心特性,并深入探讨如何优化多线程程序以提高性能和稳定性。
|
缓存 自然语言处理 测试技术
零样本文本分类——低资源场景下文本分类的利器(2)
零样本文本分类——低资源场景下文本分类的利器

热门文章

最新文章