刚编写的图片浏览器,请大家多提意见!(100分)

Z

zygtp

Unregistered / Unconfirmed
GUEST, unregistred user!
用了两周业余时间模拟acdsee编写的看图工具,开发工具用Delphi6,速度还是较慢,功能较少,无法和acdsee相比,不知继续完善前景如何,请大家多提意见和建议。
光辉图片浏览器下载地址:
http://www.csdn.net/cnshare/soft/openfile.asp?kind=1&id=18906
还有我编写的一个万能数据备份软件,欢迎大家下载试用,地址如下:
http://www.csdn.net/cnshare/soft/openfile.asp?kind=1&id=18907
 
退出有错误!
 
to zygtp
能不能把图片浏览器的原码发给我,我想学习一下,谢谢.
yangzongling18@163.com
 
有没有原码?33141124@sina.com 谢谢
 
to zygtp
能不能把产生"略图"那部分的代码给我,非常感谢!
yangzongling18@163.com
 
我也想要啊~~
哈哈
不过,好歹也是汗水结晶,大家不想意思意思啊?
 
to zygtp
能不能告诉我你的看图工具的"略图"功能是咋实现的!十分感谢!
yangzongling18@citiz.net
 
解析15位TGA图有BUG,从BUG产生的效果老看,应该是用了Mike Lischke的GraphicEx image library?9?

有些TGA图像在文件头偏移0x10的地址上储存的是0x0F(15),所以将TTargaGraphic.LoadFromStream中的
LineSize := Width * (Header.PixelSize div 8);//15 div 8 = 1
改为
LineSize := Width * ((Header.PixelSize + 1) div 8);//(15 + 1) div 8 = 2

另外LZW压缩算法专利已经过期了,可以解析和保存LZW压缩的图像文件了

你是指什么前景?免费软件可以继续做下去,就当练练手,想做共享?先向Mike Lischke购买了GraphicEx再说~~~

http://asp.6to23.com/iseesoft/
可以去看看
 
退出时出错,是由于生成缩图时用了多线程,对于大量图片退出时还未处理完毕,程序没有结束线程,以后再改。
 
我的程序中不错是使用了GraphicEx image library和GifImage,唉前途渺茫!
 
用了控件又怕啥?友立公司还用imageen控件呢

可以先卖软件后注册嘛,我们就是要充分利用别人的劳动成果来给自己创造价值,有条件利用的就一定要利用,没有条件利用的创造条件也要利用,结合到我们实际,买得起控件的一定要买来用,买不起的创造条件也要用(当然是盗版了)
:))))))
 
备份的东东也有点问题,不能正常备份。
 
我支持你!只要坚持下去,一定会有收获!
 
那要看做什么软件,比如做游戏,那么很多人都会去用网上的一些现成的图像解析库!但如果一个软件的核心功能完全由控件实现,那这个软件的价值就低了很多!要知道现在很多控件都很强大,甚至由控件自带的DEMO程序也能实现一定功能!

既然你说到前景,应该是想做共享吧!既然要做这样一个图像浏览软件,就必须自己研究一些东西,而非利用现有的东西做一些简单的拼凑!当然第一步开始也需要看看别人的代码,然后转化为自己的知识,这叫“盗亦有道”。 :)

但如果不是想做一个很专业的图像浏览软件,而只是玩玩,继续写下去也并非完全没意义!写软件本身也在熟习语言,开发工具,很多细节问题的处理都要在实践中去获得经验,这在以后都是有用!比如多线程的处理就是非常复杂的,很多经验书上都不会说明白,只能自己去领会!
 
另外说到速度较慢我也感到了,有些比较难办,比如快速生成缩略图,这个各种格式要分开处理~~~一般就是只对部分数据进行取样生成缩略图(因为生成缩略图本身也要丢弃大量像素点信息),还有就是理由某些格式的特殊地方,如部分JPEG格式本身含有缩略图,还有像PCD含有五张图,就读最小那张(192 X 128),这样处理量小很多~~~

像放大缩小要快点就容易多了,你不需要用API对位图本身进行放缩(我猜的),只需要在绘制的时候放缩就行了,简单点说,比如设置Image控件的Stretch=True,直接调整Image控件的大小!

而像水平/垂直翻转慢,我猜你是不是逐个像素处理呢?其实像垂直翻转,可以直接按行进行内存数据的交换啊~~~

给些示例代码:

//水平翻转
procedure FlipHorz(const Bitmap:TBitmap);
var
i, j: Integer;
row1, row2, rowRGB: pRGBTriple;
Width, Height: Integer;
begin
Width := Bitmap.Width;
Height := Bitmap.Height;
GetMem(rowRGB, 3);
for j := 0 to Height - 1 do
begin
row1 := Bitmap.ScanLine[j];
row2 := row1;
Inc(row2, Width - 1);
for i := 0 to (Width div 2) - 1 do
begin
rowRGB^ := row1^;
row1^ := row2^;
row2^ := rowRGB^;
Inc(row1);
Dec(row2);
end;
end;
FreeMem(rowRGB);
end;

//垂直翻转
procedure FlipVert(const Bitmap:TBitmap);
var
i, j: Integer;
row1, row2, rowRGB: pRGBTriple;
Width, Height: Integer;
begin
Height := Bitmap.Height;
Width := Bitmap.Width;
GetMem(rowRGB, Width * 3);
for j := 0 to (Height div 2) - 1 do
begin
row1 := Bitmap.ScanLine[j];
row2 := Bitmap.ScanLine[Height - j -1];
CopyMemory(rowRGB, row1, Width * 3);
CopyMemory(row1, row2, Width * 3);
CopyMemory(row2, rowRGB, Width * 3);
end;
FreeMem(rowRGB);
end;
 
Imageen的缩图做的非常好,Acdsee自然不用说了,我们自己在做的时候,要考虑到很多图像的格式问题,如果不用类似Grahpicex的控件,则必须进行文件格式的转换,那个速度是很慢的,还有如果不用文件列表控件,则自己又必须写程序来查找目标路径下的所有的图片文件,工作量可想而知,速度又受到影响,多线程在这里究竟好不好?退出的时候出错,说明不是那么好控制的,整个原理是不难的,只是要做到象ACDSEE那样快速的显示,很难!!!
 
谢谢大家的支持,速度慢主要有的三点:a)delphi本身的Grahpic装载图象较慢。b)生成缩图和放大缩小时将其它格式的图象转换为位图,不转换许多格式无法直接处理,delphi的Stretch失真很严重,就像windows的资源管理器。c).虽然采用了多线程,但没有做过复杂的处理,例如:预先读入待浏览图象、根据视觉图象区域优先读取图象、保留内存历史缩图图象(根据预设内存大小自动清除)。希望大家共同讨论!
 
可以给成能备份的源码看看吗?谢谢,wujer@163.com
 
源码恐怕不行,若要使用出现问题我可以帮您解决,免费的!对该问题贡献大的若需要本人
汉化QuickReport包,下载地址:http://www.csdn.net/cnshare/soft/openfile.asp?kind=1&id=18908,可以去掉我得大名。
 
说法有些问题,首先Graphic中提供的都是虚方法,并不实现所谓的"装载图象",所以谈不上所谓的慢!具体实现是由其派生类实现,像GraphicEx中的各图像类是从其派生类TBitmap继承的,即各种图型格式作为Bitmap在内部处理,这没什么不对,在Windows中显示图像就是用GDI绘制位图!VCL对在图形方面的封装是很优秀的,不仅方便而且很好理解!

Stretch失真很严重,的确是这样,不过VCL只是对API的封装,这和直接调用是一样的.
分析VCL:
TImage.Paint->TCanvas.StretchDraw->TGraphic.Draw
也就是调用其派生类的具体实现,如TBitmap.Draw
可看到最终它也是调用StretchBlt
失真?不过是调用SetStretchBltMode时使用了不同的参数,可见这也不是Delphi的问题!
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
顶部