『壹』 VC++得到圖像數據太大,想要壓縮後再傳輸
下載一個CxImage(開源),用它來壓縮成jpg或其它格式再傳。
也可以使用ijl。
下面是我寫的使用CxImage的例子:
#include "xImage.h"
#include "CaptureScreen.h"
#pragma comment(lib,"cximage.lib")
#pragma comment(lib,"jpeg.lib")
#pragma comment(lib,"jasper.lib")
CAPTURESCREEN_API bool __stdcall Capture(char* lpszFile,unsigned int height,unsigned int width,unsigned char jpgQuality)
{
keybd_event(VK_SNAPSHOT,0,0,0);
keybd_event(VK_SNAPSHOT,0,KEYEVENTF_KEYUP,0);
if(!IsClipboardFormatAvailable(CF_DIB))return false;
HANDLE hBitmap = NULL;
if( OpenClipboard( NULL ))
{
hBitmap = GetClipboardData(CF_DIB);
CloseClipboard();
}
if( hBitmap == NULL )return false;
CxImage image;
if( image.CreateFromHANDLE(hBitmap) == false )return false;
image.Resample(width,height,1);
image.SetJpegQuality(jpgQuality);
image.Save(lpszFile,CXIMAGE_FORMAT_JPG);
return true;
}
『貳』 如何用c語言實現壓縮圖片內存大小
是(row,col,value),這樣把所有不為零的值組成一個向量。這種存儲方式比二維數組節省了不少空間,當然還可以進一步節省,因為三元組裡面row或者col重復存儲了,一行或者一列存一次就行了,按這種思路走下去就是行壓縮存儲了。
那具體什麼是行壓縮存儲呢?行壓縮存儲的思想就是,把所有不為零的值按行訪問的順序組成一個向量,然後再把每一行值不為0的列的下標存下來,這個兩個向量的大小和稀疏矩陣中不為0的值得個數相同,當然要實現對行壓縮矩陣的訪問,還要把每一行的不為0的列的下標在第二個向量中開始的位置存下來,有人把這個叫做指針。有了這三個向量就可以實現對矩陣實現高效的按行訪問了。行壓縮存儲比三元組優秀的不僅是空間的壓縮,還有就是行訪問時的高效。三元組如果是有序的,可以二分查找來訪問一行,但是行壓縮存儲按行訪問時的時間復雜度是常數級的。 大家可以參考下面這個行壓縮矩陣示意圖: