扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:李金刚 来源:计算机与信息技术 2007年10月31日
关键字:
procedure TFormMain.Pic2BMP(Picture:TPicture); var Bmp:TBitmap; begin if not(Picture.Graphic is TBitmap)then//判断是否是BMP图像 begin Bmp:=TBitmap.Create;//不是BMP图形,就生成一个 try Bmp.Width:=Picture.Width; bmp.Height:=Picture.Height; bmp.Canvas.Draw(0,0,Picture.Graphic);//把其他格式的图像复制到BMP Picture.Graphic:=Bmp;//原始非BMP图像转换为BMP图像 Finally Bmp.Free; end; end; end; |
procedure TFormMain.PicToMiniature(SourceBMP, DescBMP:TBitmap; picH,picW :Integer); var bmp: TBitmap; begin try bmp := TBitmap.Create;//生成位图 bmp.Assign(SourceBMP);//位图图像为SourceBMP, if picW>255 then PicW:=255;//长宽不可超出255 if picH>255 then picH:=255; bmp.Width := PicW; bmp.Height :=PicH; bmp.PixelFormat := pf24bit;//24位位图 bmp.Canvas.StretchDraw(Rect(0,0,picW,picH), SourceBMP);//使位图尺寸符合要求 DescBMP.Assign(bmp); finally bmp.Free; end; end; |
function TFormMain.MakICOHead(const Mem:TStream): Boolean; var//采用流来生成 BMPHead1:tagBITMAPFILEHEADER; BMPHead2: TBitmapInfoHeader; BitsTotal:DWord; begin Result:=False; Mem.Position:=0; Mem.Read(BMPHead1,SizeOf(tagBITMAPFILEHEADER));//读取BMP文件由文件头 Mem.Read(BMPHead2,SizeOf(TBitmapInfoHeader));// 读取BMP位图信息头 if BMPHead2.biCompression=0 then //位图没有压缩 begin if (BMPHead2.biWidth<=255) and (BMPHead2.biHeight <=255)then begin //caption:=IconFileName; IconHand.idEntries.bWidth:= Byte(BMPHead2.biWidth) ;//IOC宽 IconHand.idEntries.bHeight:=Byte(BMPHead2.biHeight); //IOC高 BitsTotal:=(Mem.Size-54)*2+40; //(BMP文件的大小- 文件头、位图信息头)*2+位图信息头=ICO数据量 //乘以二的原因是:加icXOR的信息 IconHand.idEntries.dwBytesInRes:= BitsTotal; IconHand.idEntries.dwImageOffset:=$00000016; Result:=True; end; Mem.Position:=0; end; end; |
function TFormMain.MakICOData( Mem:TStream): Boolean; var Mem1,Mem2:TMemoryStream; Size:Longint; BmtMapHandle2:TBitmapInfoHeader; begin Mem1:=TMemoryStream.Create; Mem2:=TMemoryStream.Create; Size:=Mem.Size-14;//跳过14字节的BMP文件由文件头 Mem.Position:=14; try Mem1.SetSize(Size); Mem.Read(Mem1.Memory^,Size);//BMP到Mem1 Mem1.Seek(0,soFromBeginning); Mem1.Read(BmtMapHandle2,sizeof(TBitmapInfoHeader));//BMP文件的信息头 Mem2.SetSize(Size-40);//跳过40字节的BMP文件信息头 FillChar(Mem2.Memory^,Size-40,$0);//Mem2填充0 ,使掩码效果为白色 Mem2.Position:=0; BmtMapHandle2.biHeight:=IconHand.idEntries.bHeight *2;//有两幅图 BmtMapHandle2.biSizeImage:=Mem2.Size*2; Mem1.Seek(0,soFromBeginning); Mem1.Write(BmtMapHandle2,sizeof(TBitmapInfoHeader)); Mem1.Position:=0; Mem.Size:=0; //MS.SetSize(0); Mem.Write(IconHand,sizeof(tagIconDir){22});//写ICO文件头 Mem.Write(Mem1.Memory^,Mem1.Size);//写BMP片 Mem.Write(Mem2.Memory^,Mem2.Size);//写掩码 Result:=True; finally FreeAndNil(Mem1); FreeAndNil(Mem2); end; end; |
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者