c缩小图片源码(c语言图片缩放)
本文目录一览:
- 1、如何用实现图片的放大缩小与去阴影?能用C语言写出实现的算法吗?
- 2、求JPEG图像压缩技术及实现源程序 VC++/MFC
- 3、求助:VC如何实现图片的放大和缩小?
- 4、如何用c语言实现压缩图片内存大小
如何用实现图片的放大缩小与去阴影?能用C语言写出实现的算法吗?
bmp图片, 缩小没有问题, 根据缩小比例计算然后采样组成新文件就行了. .
放大的话会失真, 其实就是根据比例重新计算坐标对应位置并插值.
这两个难度不大,但用C写代码不少. 建议你可以自己动手,任何不会的环节都可以追问.因为一般回答懒得给你敲几百行代码.
去阴影不知道你指的是什么.
求JPEG图像压缩技术及实现源程序 VC++/MFC
冈萨雷斯 数字图像处理第二版,很不错的。网上有很多的下载。
静图像压缩.zip
这个是源码,C语言的。
关于数字图像处理的书还有很多,楼主可以找找看,建议去CSDN多泡泡
求助:VC如何实现图片的放大和缩小?
用StretchBlt函数即可实现,参考代码如下:
void CImgWnd::OnPaint()
{
CPaintDC dc(this); // device context for painting
//获得窗口大小
CRect r;
GetClientRect(r);
//填充背景
HBRUSH brush = (HBRUSH)::GetStockObject(GRAY_BRUSH);
::FillRect(dc.m_hDC,r,brush);
dc.SetStretchBltMode(HALFTONE);
//将位图选进设备场景中
CDC memdc;
memdc.CreateCompatibleDC( dc );
CBitmap* pOldBmp= memdc.SelectObject(m_bmpImage);
//获得位图参数
BITMAP bmp;
m_bmpImage.GetBitmap(bmp);
//开始缩放
switch(m_nStrechType)
{
case STRECH_1_1://1:1
dc.BitBlt(r.left,r.top,r.Width(),r.Height(),memdc,0,0,SRCCOPY);
break;
case STRECH_FULL_X://按宽度
dc.StretchBlt(r.left,r.top,r.Width(),bmp.bmHeight,memdc,0,0,
bmp.bmWidth,bmp.bmHeight,SRCCOPY);
break;
case STRECH_FULL_Y://按高度
dc.StretchBlt(r.left,r.top,bmp.bmWidth,r.Height(),memdc,0,0,
bmp.bmWidth,bmp.bmHeight,SRCCOPY);
break;
case STRECH_FULL://充满窗口
dc.StretchBlt(r.left,r.top,r.Width(),r.Height(),memdc,0,0,
bmp.bmWidth,bmp.bmHeight,SRCCOPY);
break;
case STRECH_CENTER://居中显示,大小为窗口的一半
dc.StretchBlt(r.Width()/4,r.Height()/4,r.Width()/2,r.Height()/2,memdc,0,0,
bmp.bmWidth,bmp.bmHeight,SRCCOPY);
break;
}
//还原
memdc.SelectObject(pOldBmp);
}
如何用c语言实现压缩图片内存大小
是(row,col,value),这样把所有不为零的值组成一个向量。这种存储方式比二维数组节省了不少空间,当然还可以进一步节省,因为三元组里面row或者col重复存储了,一行或者一列存一次就行了,按这种思路走下去就是行压缩存储了。
那具体什么是行压缩存储呢?行压缩存储的思想就是,把所有不为零的值按行访问的顺序组成一个向量,然后再把每一行值不为0的列的下标存下来,这个两个向量的大小和稀疏矩阵中不为0的值得个数相同,当然要实现对行压缩矩阵的访问,还要把每一行的不为0的列的下标在第二个向量中开始的位置存下来,有人把这个叫做指针。有了这三个向量就可以实现对矩阵实现高效的按行访问了。行压缩存储比三元组优秀的不仅是空间的压缩,还有就是行访问时的高效。三元组如果是有序的,可以二分查找来访问一行,但是行压缩存储按行访问时的时间复杂度是常数级的。 大家可以参考下面这个行压缩矩阵示意图: