1. 程式人生 > 實用技巧 >微控制器系統中的一種文字平滑(抗鋸齒)顯示方法(轉)

微控制器系統中的一種文字平滑(抗鋸齒)顯示方法(轉)

微控制器系統中的一種文字平滑(抗鋸齒)顯示方法

2.微控制器用的是stm32f103c8t6,顯示部分的程式碼很簡單:

/************************************
/
/    AlphaBlend演算法
/    輸入:
/    foreground_color:前景色
/    background_color:背景色
/    alpha:alpha值
/    返回:最終顯示的顏色值(RGB565格式)
*************************************/
uint16_t LCD_AlphaBlend(uint32_t foreground_color,uint32_t background_color,uint8_t alpha){
    uint16_t r
=0,g=0,b=0; if((foreground_color==0xffffff)&&(background_color==0)){ //預設的前景和背景色,不做alpha計算 r=alpha; g=alpha; b=alpha; } else{ uint8_t *fg = (uint8_t *)&foreground_color; uint8_t *bg = (uint8_t *)&background_color; b
= ((int)(*fg * alpha) + (int)*bg * (256 - alpha))>>8; fg++;bg++; g = ((int)(*fg * alpha) + (int)*bg * (256 - alpha))>>8; fg++;bg++; r = ((int)(*fg * alpha) + (int)*bg * (256 - alpha))>>8; } uint16_t temp= (((b >>3) & 0x1f)<<0)|(((g>>2
) & 0x3f) << 5) |(((r >>3) & 0x1f) <<11); return (temp << 8) | (temp >> 8);//由於用的是DMA傳輸,需要高低位元組互換 } /***************** *顯示中文字元 ****************/ void LCD_ShowZhChar(int x,int y,char *str,uint32_t fc,uint32_t bc){ memset(fontCache, 0, sizeof(fontCache)); //fontCache是字型檔顯示快取,32x32x2大小 uint16_t *p = fontCache; for (int i = 0; i < ZH_FONT_WIDTH*ZH_FONT_HEIGHT; i++) { *p = LCD_AlphaBlend(fc,bc, gZhFont[i]); p++; } LCD_setAddrWindow(x, y, x+ZH_FONT_WIDTH-1, y+ZH_FONT_HEIGHT-1);//設定顯示區域 SPI_LCD_CS_LOW(); SPI_LCD_DATA_R(); LCD_DMA_Send((uint8_t *)fontCache, sizeof(fontCache)); //DMA傳送 while(is_LCD_DMA_busy); SPI_LCD_CS_HIGH(); }