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

目录
相关文章
|
29天前
|
图形学
小功能⭐️Unity中Texture2D、Sprite、Texture、RenderTexture、image、byte的转换
小功能⭐️Unity中Texture2D、Sprite、Texture、RenderTexture、image、byte的转换
|
4月前
|
编解码 算法 vr&ar
深度剖析FFmpeg视频解码后的帧处理到Qt显示 从AVFrame到QImage的转换(二)
深度剖析FFmpeg视频解码后的帧处理到Qt显示 从AVFrame到QImage的转换
177 1
|
4月前
|
存储 编解码 算法
深度剖析FFmpeg视频解码后的帧处理到Qt显示 从AVFrame到QImage的转换(一)
深度剖析FFmpeg视频解码后的帧处理到Qt显示 从AVFrame到QImage的转换
318 1
|
4月前
|
存储 算法 编译器
【ffmpeg 到Qt的图片格式转换】精彩的像素:深入解析 AVFrame 到 QImage 的转换
【ffmpeg 到Qt的图片格式转换】精彩的像素:深入解析 AVFrame 到 QImage 的转换
182 0
|
图形学
Qt&Vtk-003-读取jpg、png、dicom等格式图片
本文其实才能算是真正的Qt与Vtk结合,具体实现JPG、PNG、TIFF、DICOM、BMP及一个3D Cube显示。
654 1
Qt&Vtk-003-读取jpg、png、dicom等格式图片
FreeType像素格式:FT_PIXEL_MODE_MONO
FreeType像素格式:FT_PIXEL_MODE_MONO
129 0
|
存储 Java 数据处理
【Android 内存优化】Android 工程中使用 libjpeg-turbo 压缩图片 ( JNI 传递 Bitmap | 获取位图信息 | 获取图像数据 | 图像数据过滤 | 释放资源 )
【Android 内存优化】Android 工程中使用 libjpeg-turbo 压缩图片 ( JNI 传递 Bitmap | 获取位图信息 | 获取图像数据 | 图像数据过滤 | 释放资源 )
379 0
|
存储 Java API
【Android 内存优化】Android 原生 API 图片压缩原理 ( Bitmap_compress 方法解析 | Skia 二维图形库 | libjpeg 函数库 | libpng 函数库 )
【Android 内存优化】Android 原生 API 图片压缩原理 ( Bitmap_compress 方法解析 | Skia 二维图形库 | libjpeg 函数库 | libpng 函数库 )
248 0
|
存储 编解码 算法
【Android FFMPEG 开发】FFMPEG AVFrame 图像格式转换 YUV -> RGBA ( 获取 SwsContext | 初始化图像数据存储内存 | 图像格式转换 )
【Android FFMPEG 开发】FFMPEG AVFrame 图像格式转换 YUV -> RGBA ( 获取 SwsContext | 初始化图像数据存储内存 | 图像格式转换 )
410 0
|
5G API 算法
33.FFmpeg+OpenGLES+OpenSLES播放器实现(七.FFmpeg像素格式转换和音频重采样)
项目源码FFmpeg开发文档 像素格式转换 像素格式描述了像素数据存储所用的格式。定义了像素在内存中的编码方式。FFmpeg支持的像素格式主要是rbg和yuv两种,具体可以在结构体AVPixelFormat中看到 /** * Pixel format.
1994 0