我在论坛里找了,没找到,有旧帖子,但是看不了,无法显示。
我想做个看图的软件,练习一下。用了Listview控件,它的Largimage是imagelist2,但是imagelist是只支持bmp和ico图片的,因此要显示jpg图片的缩略图我就需要将jpg图片转化为bmp图片,并且按原图尺寸的比例缩小到30*30以下,因为imagelist的大小就是30*30。目前我已经将jpg图片转换为了bmp图片,并且可以显示出来了,但是由于没有经过尺寸处理,只能显示30*30的部分,其他部分就看不到,而且显示的非常慢,因此需要把图片缩小,请问怎么做?谢谢大家啊~~~~
我想做个看图的软件,练习一下。用了Listview控件,它的Largimage是imagelist2,但是imagelist是只支持bmp和ico图片的,因此要显示jpg图片的缩略图我就需要将jpg图片转化为bmp图片,并且按原图尺寸的比例缩小到30*30以下,因为imagelist的大小就是30*30。目前我已经将jpg图片转换为了bmp图片,并且可以显示出来了,但是由于没有经过尺寸处理,只能显示30*30的部分,其他部分就看不到,而且显示的非常慢,因此需要把图片缩小,请问怎么做?谢谢大家啊~~~~
解决方案 »
- MOVE 操作的困惑
- 大家帮我看一下这条代码,这样有问题吗
- 怎样得到本地打印机\网络打印机的打印消息?(N多分相送)
- 大家看看这样的查询问题能解决吗?
- (2)二进制文件操作.......应该不大难的.......100%结贴的.......不分高手低手,CSDN所有热心的兄弟们都来!
- 1.如何锁定计算机;2.如何将屏幕黑屏;3......
- 关于treeview,请问大家有没有关于treeview的资料?示例,文档
- 如果让在dbgrid的一个cell里只能输入数字
- 使用 WH_JOURNALRECORD 总是键盘鼠标均无反映!!!怎么回事??
- 关于关机与监控系统
- 如何在WINDOWS2000下快速打印发票!
- AdoQuery无法更新三行以上的记录!
可以如下,(其他格式也许也可,试一下)记得加入 use jpeg.
varMyJpeg: TJpegImage;Image1: TImage;beginImage1:= TImage.Create(self);MyJpeg:= TJpegImage.Create;Image1.Picture.Bitmap.LoadFromFile('c:.BMP'); // Load the Bitmap from a fileMyJpeg.Assign(Image1.Picture.Bitmap); // Assign the BitMap to MyJpeg objectMyJpeg.CompressionQuality:=StrToInt('75');MyJpeg.Compress;MyJpeg.SaveToFile('c:.JPG'); // Save the JPEG to Diskend;varMyJpeg: TJpegImage;bmp: Tbitmap;beginbmp:=tbitmap.Create;MyJpeg:= TJpegImage.Create;myjpeg.LoadFromFile('c:.jpg');bmp.Assign(myjpeg);bmp.SaveToFile('c:.bmp'); // Save the JPEG to Diskend;**************************************************************************///Bitmap 和 JPEG 格式间的快速转换function Bmp2Jpg(Bmp: TBitmap; Quality: Integer = 100): TJpegImage;beginResult := nil;if Assigned(Bmp)then beginResult := TJpegImage.Create;Result.Assign(Bmp); {It′s all folks...}Result.CompressionQuality := Quality;Result.JPEGNeeded; {Key method...}Result.Compress;end;end;function Jpg2Bmp(Jpg: TJpegImage): TBitmap;beginResult := nil;if Assigned(Jpg)then beginResult := TBitmap.Create;Jpg.DIBNeeded; {Key method...}Result.Assign(Jpg); {It′s all folks...}end;end;
bitmap: TBitmap;
Jpg: TJpegImage;
rect: TRect;
begin
...
rect.left:=0;
rect.top:=0;
rect.right:=Jpg.Width/2;
rect.bottom:=Jpg.Height/2; bitmap.Canvas.StretchDraw(rect,Jpg);
...
end;
rect.bottom:=JpgFile.Height/2;这里有错误啊,Incompatible types: 'Integer' and 'Extended'
if (AnsiLowerCase(ExtractFileExt(SearchRec.Name))='.jpg') then
begin
ListView1.Items.BeginUpdate;
try
JpgFile.LoadFromFile(Folder+SearchRec.Name); rect.left:=0;
rect.top:=0;
rect.right:=JpgFile.Width/2
rect.bottom:=JpgFile.Height/2;
;//上面两行会出现Incompatible types: 'Integer' and 'Extended'的错误, BitFile.Canvas.StretchDraw(rect,JpgFile);
ImageList2.Add(BitFile,nil); ListItem:=ListView1.Items.Add; //就是这里提示出错,ivalid image size
ListItem.Caption:=SearchRec.Name;
ListItem.ImageIndex:=imagelist2.Count-1;
finally
ListView1.Items.EndUpdate;
BitFile.FreeImage;
end;
end;
但是第一个错误咋办呢?
bitmap: TBitmap;
Jpg: TJpegImage;
rect: TRect;
begin
...
rect.left:=0;
rect.top:=0;
rect.right:=Jpg.Width div 2;
rect.bottom:=Jpg.Height div 2; bitmap.Width:=Jpg.Width div 2;
bitmap.Height:=Jpg.Height div 2; bitmap.Canvas.StretchDraw(rect,Jpg);
...
end;
这前面是查找语句,循环把jpg图片插到imagelist2中的。
if (AnsiLowerCase(ExtractFileExt(SearchRec.Name))='.jpg') then
begin
ListView1.Items.BeginUpdate;
try
JpgFile.LoadFromFile(Folder+SearchRec.Name);
rect.left:=0;
rect.top:=0;
h:=JpgFile.Height * 80 div JpgFile.Width;
w:=JpgFile.Width * 80 div JpgFile.Height;
if JpgFile.Width>JpgFile.Height then
begin
rect.right:=80;
rect.bottom:=h;
end
else if JpgFile.Height>JpgFile.Width then
begin
rect.right:=w;
rect.Bottom:=80;
end;
BitFile.Width:=80;
BitFile.Height:=80;
BitFile.Canvas.StretchDraw(rect,JpgFile);
ImageList2.Add(BitFile,nil);
ListItem:=ListView1.Items.Add;
ListItem.Caption:=SearchRec.Name;
ListItem.ImageIndex:=imagelist2.Count-1;
finally
ListView1.Items.EndUpdate;
BitFile.FreeImage;
end;
end;
在循环开始把JpgFile,BitFile create,然后在循环完成之前,也就是finally后把她们destory掉,这样能解决,对吗?
比如32*32的我想把它放大到48*48的,加到imagelist中。