日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

图片缩放算法

發布時間:2023/11/30 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 图片缩放算法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

項目背景:博主之前做過一個攝像頭采集數據,然后在LCD上顯示視頻數據的項目,假如我們攝像頭采集的一幀數據的分辨率比我們的LCD的分辨率要大,那么LCD則無法顯示整個圖像,這時候我們就要把這么一幀圖片進行縮放,然后再顯示在LCD上。

?

本文采用的是近鄰取樣插值方法縮放圖片,比如原圖有100個點,想縮放10倍的話,那就要取10個點,(點的編號)比如0 10 20 30 。。。100(其他點就不要了)。

下面我們直接通過程序來分析:首先我們用? 輸入分辨率/壓縮后的分辨率? 可得到一個縮放比例值k,根據這個k值找出我們要保存原圖上哪些豎線橫線。橫線和豎線的交點就是我們要保存的點。

/*********************************************************************** 函數名稱: PicZoom* 功能描述: 近鄰取樣插值方法縮放圖片* 注意該函數會分配內存來存放縮放后的圖片,用完后要用free函數釋放掉* "近鄰取樣插值"的原理請參考網友"lantianyu520"所著的"圖像縮放算法"* 輸入參數: ptOriginPic - 內含原始圖片的象素數據* ptBigPic - 內含縮放后的圖片的象素數據* 輸出參數: 無* 返 回 值: 0 - 成功, 其他值 - 失敗***********************************************************************/ int PicZoom(PT_PixelDatas ptOriginPic, PT_PixelDatas ptZoomPic) {unsigned long dwDstWidth = ptZoomPic->iWidth;//壓縮后分辨率的寬度值unsigned long* pdwSrcXTable;unsigned long x;unsigned long y;unsigned long dwSrcY;unsigned char *pucDest;unsigned char *pucSrc;unsigned long dwPixelBytes = ptOriginPic->iBpp/8;if (ptOriginPic->iBpp != ptZoomPic->iBpp){return -1;}//pdwSrcXTable數組用來存放要保存的是哪些“豎線”(保存上圖紅色豎線的位置)pdwSrcXTable = malloc(sizeof(unsigned long) * dwDstWidth);if (NULL == pdwSrcXTable){DBG_PRINTF("malloc error!\n");return -1;}//pdwSrcXTable數組用來存放要保存的是哪些“豎線”(保存上圖紅色豎線的位置)for (x = 0; x < dwDstWidth; x++)//生成表 pdwSrcXTable{pdwSrcXTable[x]=(x*ptOriginPic->iWidth/ptZoomPic->iWidth);}//循環“壓縮后圖片的分辨率的高度”次,也就是開始把要留下的點放進輸出buffer了for (y = 0; y < ptZoomPic->iHeight; y++){ //找出每一次要保存的“橫線” dwSrcY = (y * ptOriginPic->iHeight / ptZoomPic->iHeight);//目的的起始地址pucDest = ptZoomPic->aucPixelDatas + y*ptZoomPic->iLineBytes;//源的起始地址(橫線的位置是每個點的起始地址,豎線的位置是偏移位置)pucSrc = ptOriginPic->aucPixelDatas + dwSrcY*ptOriginPic->iLineBytes;//每條橫線上有dwDstWidth個點要保存for (x = 0; x <dwDstWidth; x++){//結合pdwSrcXTable數組找出要保存的點memcpy(pucDest+x*dwPixelBytes, pucSrc+pdwSrcXTable[x]*dwPixelBytes, dwPixelBytes);}}free(pdwSrcXTable);return 0; }

?

?

總結

以上是生活随笔為你收集整理的图片缩放算法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。