社区
图形处理/算法
帖子详情
如何在尽量少占用内存的情况下旋转图像文件
wuyapu
2004-08-12 08:21:43
将图像文件1旋转90度存入图像文件2,如何才能占用内存最小且速度不受太大影响。
...全文
259
12
打赏
收藏
如何在尽量少占用内存的情况下旋转图像文件
将图像文件1旋转90度存入图像文件2,如何才能占用内存最小且速度不受太大影响。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
12 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
wuyapu
2004-08-16
打赏
举报
回复
图像全部读入内存肯定不合适,有没有什么这折衷的方法,真是很郁闷阿,大家帮忙想个好办法
wuyapu
2004-08-13
打赏
举报
回复
接着顶,大家还是没有回答到点子上,我要旋转的是图像文件,不希望一次性将图像全部读入内存
内存映射的问题是指针跳来跳去,速度好像很慢,
huaboy408
2004-08-13
打赏
举报
回复
参看一下老大的帖子,看对你有没有帮助
面试问题: Rotate a bitmap by 90 degrees
http://community.csdn.net/Expert/topic/3254/3254627.xml?temp=4.619777E-03
syy64
2004-08-13
打赏
举报
回复
用汇编编程。
wanglh
2004-08-13
打赏
举报
回复
如果不想用太多内存,就从原图像中一个个像素的读出数据,计算目的图像中这个像素写入的位置,然后再写入文件。不过这样的话在目的文件内移动文件指针太频繁,效率不高。
因为旋转90度的图像,原来相连的图像点转换后分散开了,所以用小内存的话,文件指针移动肯定比较频繁。分块读入的效果也不是太理想。
Jimmy_Xia
2004-08-13
打赏
举报
回复
楼主是要把一幅图像(不能全部读入内存的),一点一点的读取出来,再旋转90度,然后保存到另外一个文件。这个好难啊,我是菜鸟,只能顶一个了。
LanceX
2004-08-13
打赏
举报
回复
如果您有小型的DIB并且需要频繁地操作图素位,您可以使用SetDIBitsToDevice和StretchDIBits来显示它们。然而,对于大型的DIB,此技术会遇到显示效能的问题,尤其在8位视讯显示器上和Windows NT环境下。
您可以使用CreateDIBitmap和SetDIBits把DIB转化为DDB。现在,显示位图可以使用快速的BitBlt和StretchBlt函数来进行了。然而,您不能直接存取这些与设备无关的图素位。
CreateDIBSection是一个很好的折衷方案。在Windows NT下通过BitBlt和StretchBlt使用位图句柄比使用SetDIBitsToDevice和StretchDIBits(但没有DDB的缺陷)会得到更好的效能。您仍然可以存取DIB图素位。
摘自<Windows程序设计>
lixiaosan
2004-08-12
打赏
举报
回复
用gdi+
http://www.yesky.com/SoftChannel/72342380468174848/20040301/1772782_1.shtml
huanyun
2004-08-12
打赏
举报
回复
typedef struct tagXIMGDATA
{
int width;
int height;
void * pScan0; // pointer to first scanline
int bpp; // bits per pixel
int stride; // distance between scanlines
} XIMGDATA;
void FreeImg(XIMGDATA& ImgDst)
{
if(ImgDst.pScan0 != NULL)
{
delete [] ImgDst.pScan0;
ImgDst.pScan0 = NULL;
ImgDst.width = 0;
ImgDst.height = 0;
ImgDst.bpp = 0;
ImgDst.stride = 0;
}
}
int RotateImg(XIMGDATA& ImgDst,const XIMGDATA& ImgSrc)
{
int nRet = -1;
FreeImg(ImgDst);
int nWidthS = ImgSrc.width;
int nHeightS = ImgSrc.height;
int nWidthD = nHeightS;
int nHeightD = nWidthS;
int nBitCount = ImgSrc.bpp;
int nRowLenSrc = ImgSrc.stride;
BYTE* pSrc = static_cast<BYTE*>(ImgSrc.pScan0);
if (nWidthS < 1 || nHeightS < 1
|| nWidthS > 10000 || nHeightS > 10000
|| nBitCount < 1 || nBitCount > 64
|| nRowLenSrc < 0 || pSrc == NULL)
return nRet;
int nRowLenDst = nWidthD * nBitCount / 8;
if (nBitCount == 1 && nWidthD % 8) ++nRowLenDst;
nRowLenDst = ((nRowLenDst + 3) & ~3);
BYTE *pDst = new BYTE[nHeightD*nRowLenDst];
if(pDst == NULL)
{
FreeImg(ImgDst);
return nRet;
}
memset(pDst, 0, nHeightD*nRowLenDst);
ImgDst.pScan0 = static_cast<void*>(pDst);
ImgDst.width = nWidthD;
ImgDst.height = nHeightD;
ImgDst.bpp = nBitCount;
ImgDst.stride = nRowLenDst;
int i,x,y,nPosS=0,nPosD=0;
int nPixelByte = ImgDst.bpp>>3;
BYTE bMaskD,bMaskS;
switch(nBitCount)
{
case 1:
for(y=0;y<nHeightD;++y)
{
nPosD = nRowLenDst*y;
nPosS = y>>3;
bMaskD = static_cast<BYTE>( 0x80 );
bMaskS = static_cast<BYTE>( 0x80 >> (y % 3) );
x = 0;
while(x < nWidthD)
{
if(pSrc[nPosS] & bMaskS)
{
pDst[nPosD] |= bMaskD;
}
++x;
bMaskD >>=1;
nPosS += nRowLenSrc;
if(bMaskD == 0)
{
bMaskD=0x80;
++nPosD;
}
}
for(x=0;;++x)
{
pDst[nPosD] = pSrc[nPosS];
nPosD += nPixelByte;
nPosS += nRowLenSrc;
}
}
nRet = 0;
break;
case 8:
case 16:
case 24:
case 32:
for(y=0;y<nHeightD;++y)
{
nPosD = nRowLenDst*y;
nPosS = y*nPixelByte;
for(x=0;x<nWidthD;++x)
{
for(i=0;i<nPixelByte;++i)
{
pDst[nPosD+i] = pSrc[nPosS+i];
}
nPosD += nPixelByte;
nPosS += nRowLenSrc;
}
}
nRet = 0;
break;
default:
break;
}
return nRet;
}
s6283
2004-08-12
打赏
举报
回复
内存映射方式打开和保存文件
wuyapu
2004-08-12
打赏
举报
回复
只旋转90度,这样不需要考虑插值。
文件比较大,如果文件小的话,我就直接全部读入内存了。
另外,我不需要显示
酒红绿叶
2004-08-12
打赏
举报
回复
首先,图像不能太大,,太大速度会很慢。
另外,想提高速度,要优化算法,不使用差值算法。。
提高显示速度,可以用双缓存来解决!
Android相机资源
占用
,android处理拍照
旋转
问题及带来的对
内存
占用
的思考
本篇文章目的不是简单解决
旋转
问题,而是通过这样的问题讨论下android
内存
占用
(主要是图片)的问题。通过文章大家可以掌握如下知识:如何解决上面提到的三星拍照问题如何计算bitmap
占用
的
内存
大小如何尽量避免OOM的...
android处理拍照
旋转
问题及带来的对
内存
占用
想必大家对android处理拍照并保存照片的应用场景已经再熟悉不过了,其中比较头疼的问题是像部分三星手机拍完照片后...本篇文章目的不是简单解决
旋转
问题,而是通过这样的问题讨论下android
内存
占用
(主要是图片)...
对于需要处理大量图片和文件的程序,压缩算法和优化图片大小是非常有效的减少
内存
占用
的手段。
其次,优化图片大小也是减少
内存
占用
的有效方法。通过调整图片的分辨率、格式等参数,可以使其
占用
更少的
内存
。一些图片格式,如PNG、JPEG等,具有压缩功能,可以有效减少图片所
占用
的
内存
空间。
android处理拍照
旋转
问题及带来的对
内存
占用
的思考
本篇文章目的不是简单解决
旋转
问题,而是通过这样的问题讨论下android
内存
占用
(主要是图片)的问题。通过文章大家可以掌握如下知识: 如何解决上面提到的三星拍照问题 如何计算bitmap
占用
的
内存
大小 如何...
Glide源码分析和低
内存
优化
2.压缩网络图片,网络加载少量的图片不会出现问题,但是若短时间内加载大量的图片,短时间内
占用
大量的
内存
,造成
内存
抖动,甚至稻城 OOM(
内存
溢出) 3.变换图片,剪切切割圆角,
旋转
,高斯模糊等。 ...
图形处理/算法
19,468
社区成员
50,698
社区内容
发帖
与我相关
我的任务
图形处理/算法
VC/MFC 图形处理/算法
复制链接
扫一扫
分享
社区描述
VC/MFC 图形处理/算法
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章