首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 如何快速的将1个jpg文件,切割成多个文件? [已结贴,结贴人:qwertyasd]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-11 09:43:21 楼主
    如何快速的将1个jpg文件,切割成多个文件?
    将jpg文件转换成bmp再切割,然后将bmp保存成jpg我会的,但是感觉效率太低,如何能提高效率?
    200  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • dl110
    • 等级:
    发表于:2008-05-11 10:15:261楼 得分:10
    我的思路.可能比较笨:
    首先确认是jpg文件,然后:文件操作->读取jpg文件头和数据部分->分别保存至变量->获取图像数据大小(人工分析,在固定位置,格式)->按照切割数循环,将数据部分切割->将切割后的数据加上文件头,数据大小,文件尾(固定格式,好象是FFD9,具体记不清了.FFD8是文件头的起始标志)->保存.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • akirya
    • 等级:
    发表于:2008-05-11 10:55:272楼 得分:11
    jpg是压缩的,你总得解压缩吧.
    你的方法就挺合适的.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • gyk120
    • 等级:
    发表于:2008-05-11 11:23:153楼 得分:11
    图片转过来转过去不会失真吗?
    个人觉得1楼的方法不错
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-11 14:31:404楼 得分:11
    分割文件?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-11 14:39:145楼 得分:11
    就如一楼的思路,你要先去搞懂JPEG的编码格式。至少搞清楚头/尾的格式标准。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • qkhhxkj102
    • 等级:
    发表于:2008-05-11 14:55:306楼 得分:11
    先坐下
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-11 18:00:087楼 得分:1
    推荐使用Open cv
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-11 18:11:318楼 得分:111
    C/C++ code
    使用vc封装一个open cv图片切割的实现dll使用delphi来调用,或者你直接使用vc来做。 以下是简单的测试代码: void ImageCopy( IplImage* input , IplImage* output , CvRect inputRect , CvRect outputRect ) { cvSetImageROI( input, inputRect ); cvSetImageROI( output, outputRect ); cvResize( input, output ,CV_INTER_AREA); } int SaveToFile( IplImage* output , char* fileName ) { cvResetImageROI( output ); cvSaveImage( fileName,output ); return 0; } int PhotoSplit( char* srcFileName , char* destFileName ) { IplImage* input=cvLoadImage( srcFileName ,1 ); CvSize outputSize = { 768, 288 };//切割后图片大小 IplImage* output = cvCreateImage( outputSize, input->depth, input->nChannels ); ImageCopy( input,output,cvRect( 0,0,768,288 ),cvRect( 0,0,768,288) );//将srcFileName 的0,0,768,288内容切割出来 SaveToFile( output , destFileName ); cvReleaseImage( &output ); return 0; }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-12 13:17:189楼 得分:11
    要快速切割肯定不能用现成的接口来实现,1楼的想法应该是最好的,jpeg在压缩的时候是按一个小单元一个小单元放的,所以可以不用解压缩,直接把每个小单元分开放到不同文件就可以了。每个小单元好像是8X8的像素矩阵
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-12 13:27:2110楼 得分:5
    如果不了解jpg的格式,可以考虑,把jpg加载到TBitMap上,然后分割这个TBitMap成你要求的块,每块单独存成一个jpg文件。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-13 09:20:2811楼 得分:5
    首先说:我不是很懂
    其次:那些麻将怎么弄的,不是一个大图一个一个切的么?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-13 09:26:1812楼 得分:2
    楼主的方法很对,如果你认为麻烦,可以把它封装成类.
    就是你找现成的方法,也和你的想法差不多!
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved