ultramanhkf 2017-12-25 07:41 采纳率: 0%
浏览 2539
已结题

QT 在 Framebuffer上的字体显示问题

最近做了一个Linux下的 frambuffer驱动,然后移植了qt5和qt4,
为了做一个简单的demo用于验证驱动是好的。
现在的现象是,通过qt在显示ttf字体的时候,感觉渲染非常糟糕,不知道是驱动问题还是配置问题。
下面两个截图,2个图显示的内容一样,唯一的区别是,字体颜色不同。
为了区分ttf显示样式,还同时显示了点阵字体(所谓qpf字体)。
其中,上方法时间字符串为点阵字体;下发的英文为ttf字体。
图1显示的字体颜色为蓝色,可以看到点阵字体显示正常,但是ttf就很奇怪。
图2显示的字体颜色为白色,两者看起来显示都正常,ttf还蛮好看的。
另外,已经经过直接写入fb验证,rgb颜色序列在驱动中是正确的。
图片说明

图片说明

现在搞不清楚 到底哪里有问题。
另外,也直接使用 FreeType2来读取点阵来显示,这个和直接显示点阵字体一样,没什么问题。

  • 写回答

3条回答

  • ultramanhkf 2017-12-25 07:47
    关注

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
     #define IMAGE_WIDTH     128                 
     #define IMAGE_HEIGHT    96
     
    //set to 0 means use internal fp_ops
    static struct fb_ops oledfb_ops ={.owner        = THIS_MODULE,};
    static struct fb_info *oled_fb_info;
     
    int fb_init(void)
    {
        int r;
         
        oled_fb_info=framebuffer_alloc(0, NULL);
         
         
        strcpy(oled_fb_info->fix.id, "OLED-SPI-1.27");
         
        oled_fb_info->fix.smem_len    = IMAGE_WIDTH*IMAGE_HEIGHT*3;
        oled_fb_info->fix.type        = FB_TYPE_PACKED_PIXELS;
        oled_fb_info->fix.visual      = FB_VISUAL_TRUECOLOR;
        oled_fb_info->fix.line_length = IMAGE_WIDTH * 3;
     
        oled_fb_info->var.xres             = IMAGE_WIDTH;
        oled_fb_info->var.yres             = IMAGE_HEIGHT;
        oled_fb_info->var.xres_virtual     = IMAGE_WIDTH;
        oled_fb_info->var.yres_virtual     = IMAGE_HEIGHT;
        oled_fb_info->var.bits_per_pixel   = 24;
         
        oled_fb_info->var.height=19;//mm unit
        oled_fb_info->var.width=26;//mm unit
         
         
        oled_fb_info->var.red.offset       = 16;
        oled_fb_info->var.green.offset     = 8;
        oled_fb_info->var.blue.offset      = 0;
         
        oled_fb_info->var.red.length       = 8;
        oled_fb_info->var.blue.length      = 8;
        oled_fb_info->var.green.length     = 8;
         
         
        oled_fb_info->fbops=&oledfb_ops;
         
        //oled_fb_info->pseudo_palette=colregs;
         
        //this is used fo mmap
        oled_fb_info->fix.smem_start = virt_to_phys(pOledDrv->pFrameBuffer);
        oled_fb_info->screen_base    = pOledDrv->pFrameBuffer;
         
        r=register_framebuffer(oled_fb_info);
     
        printk("register fb :%d\n",r);
         
        printk("fb buffer:%x,(P:%lx)\n",(int)oled_fb_info->screen_base,oled_fb_info->fix.smem_start);
         
        return 0;
    }
    
    
    评论

报告相同问题?

悬赏问题

  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?