图片分割问题

zklove 2008-12-10 11:54:50
如何将一个JPG文件分割成多个固定的文件,原JPG文件大概在2、300M,20000*20000,找了点资料,这样的图片应该需要分段读入和分区显示,不过不知道具体怎么实现,请高手告诉一下,如果解决问题,另送500分哈,谢谢了
...全文
339 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
数字蛋糕 2009-03-27
  • 打赏
  • 举报
回复
分割从来不是问题,但要分段读取的话楼主你恐怕要伤脑筋了。你可以下载PasJPEG的源代码(其实就是Delphi自带的那个,只不过Borland没有给你源代码),里头其实是翻译的IJG的C代码,有很多底层API。但要搞清楚这些API的用途恐怕不是一件简单的事情。
simb 2009-02-27
  • 打赏
  • 举报
回复
没太懂你说的什么意思!
我想你的意思应该是想把文件先读一部分显示, 然后再读一部分再显示吧
zxx_0405 2009-01-20
  • 打赏
  • 举报
回复
分割图片还是文件???
可以直接装载到BMP上操作的,没搞清楚
hongqi162 2009-01-14
  • 打赏
  • 举报
回复
如果使用opencv的话效果会更好一些,速度上也有提升,不过如果是delphi使用的话你需要自己写一个dll来操作opencv然后你的delphi再调用这个dll,opencv 是intel的视觉库sourceforge上有下载,论坛你可以去阿须论坛
cvSetImageROI( input, inputRect );
cvSetImageROI( output, outputRect );
cvResize( input, output ,CV_INTER_AREA);
ahjoe 2009-01-14
  • 打赏
  • 举报
回复
20000*20000,如果还原成Bitmap (24-bit color),将有1.2G大小,很多电脑不能提供这么多内存。
鉴于以上原因,11楼的代码,应该算是有问题的


unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, Jpeg;

type
TForm1 = class(TForm)
Button1: TButton;
Image1: TImage;
Image2: TImage;
Image3: TImage;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}


procedure TForm1.Button1Click(Sender: TObject);
var
JPGpic: TJpegImage;
Bmp: TBitmap;
y, h:integer;
begin
JPGpic := TJpegImage.Create();
JPGpic.LoadFromFile('D:\未命名.JPG');
Bmp := TBitmap.Create();
Bmp.Width := JPGpic.Width;
h := JPGpic.Height div 3;
Bmp.Height := h;
y := 0;
with Image1 do
begin
Height:=Bmp.Height;
Width:=Bmp.Width;
Bmp.Canvas.Draw(0, y, JPGpic);
Picture.Assign(Bmp);
end;
Dec(y, h);
with Image2 do
begin
Height:=Bmp.Height;
Width:=Bmp.Width;
Bmp.Canvas.Draw(0, y, JPGpic);
Picture.Assign(Bmp);
end;
Dec(y, h);
with Image3 do
begin
Height:=Bmp.Height;
Width:=Bmp.Width;
Bmp.Canvas.Draw(0, y, JPGpic);
Picture.Assign(Bmp);
end;

Bmp.Free();
end;

end.
ljluck7687 2009-01-12
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 zkyylove 的回复:]
主要是当一个很大的JPG读入的时候,如果是BMP,我还可以分段读取,分片显示,但是文件如果是JPG怎么办?可以分段读入JPG,然后解压不?
[/Quote]

可以将JPG对象装入BMP对象处理

你的图像20000*20000,图像的尺寸不会太大吧,所以2、300M,写错了吧
zkyylove 2009-01-12
  • 打赏
  • 举报
回复
主要是当一个很大的JPG读入的时候,如果是BMP,我还可以分段读取,分片显示,但是文件如果是JPG怎么办?可以分段读入JPG,然后解压不?
zkyylove 2009-01-12
  • 打赏
  • 举报
回复
zkxmlove@163.com,楼上的兄弟,谢了
wwwzxl 2009-01-12
  • 打赏
  • 举报
回复
mark以后可能碰到
无条件为你 2009-01-12
  • 打赏
  • 举报
回复
下面的代码可以实现分割:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
Image1: TImage;
Image2: TImage;
Image3: TImage;
Image4: TImage;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var Rect1,Rect2,Rect3:TRect;
bmp:TBitmap;
w,h:integer;
begin

bmp:= TBitmap.Create;
bmp.Assign(Image1.Picture.Graphic);
w:=Image1.Width ;
h:=Image1.Height div 3;
Rect1:=Rect(0,0,w,h);
Rect2:=Rect(0,h,w,h*2);
Rect3:=Rect(0,h*2,w,h*3);
with Image2 do
begin
Height:=h;
Width:=w;
Canvas.CopyRect(Rect1,bmp.Canvas,Rect1);
end;
with Image3 do
begin
Height:=h;
Width:=w;
Canvas.CopyRect(Rect1,bmp.Canvas,Rect2);
end;
with Image4 do
begin
Height:=h;
Width:=w;
Canvas.CopyRect(Rect1,bmp.Canvas,Rect3);
end;
bmp.Free;
end;

end.



已经将整个工程打包发到你的信箱zkxmlove@163.com中了!
ahjoe 2008-12-14
  • 打赏
  • 举报
回复
如果内存够大,一次读入吧。
ahjoe 2008-12-14
  • 打赏
  • 举报
回复
你得研究一下Bitmap文件结构。
无条件为你 2008-12-14
  • 打赏
  • 举报
回复
图片分割我会三种方法,留下你的联系方式,帮你搞定。
wap21 2008-12-14
  • 打赏
  • 举报
回复
帮顶
gyk120 2008-12-14
  • 打赏
  • 举报
回复
procedure TForm1.Button1Click(Sender: TObject);
var Rect1,Rect2,Rect3:TRect;
bmp:TBitmap;
w,h:integer;
begin

bmp:= TBitmap.Create;
bmp.Assign(Image1.Picture.Graphic);
w:=Image1.Width ;
h:=Image1.Height div 3;
Rect1:=Rect(0,0,w,h);
Rect2:=Rect(0,h,w,h*2);
Rect3:=Rect(0,h*2,w,h*3);
with Image2 do
begin
Height:=h;
Width:=w;
Canvas.CopyRect(Rect1,bmp.Canvas,Rect1);
end;
with Image3 do
begin
Height:=h;
Width:=w;
Canvas.CopyRect(Rect1,bmp.Canvas,Rect2);
end;
with Image4 do
begin
Height:=h;
Width:=w;
Canvas.CopyRect(Rect1,bmp.Canvas,Rect3);
end;
bmp.Free;
end;

这是分成3个的,实现你的功能估计还需要自己加代码。。。
zklove 2008-12-10
  • 打赏
  • 举报
回复
我顶
xiaowei_001 2008-12-10
  • 打赏
  • 举报
回复
关注,帮顶

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi GAME,图形处理/多媒体
社区管理员
  • GAME,图形处理/多媒体社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧