当前位置:文档之家› 图片格式转换

图片格式转换

常见图象格式转换技术1. ICO图标转换BMP格式2. 32x32 BMP格式图象转换为ICO格式3.转换BMP->JPEG文件格式4.JPEG 转换为BMP函数5.Bmp转换为JPEG文件格式函数-------------------------------------------------------------------------------------------------------------------------1.Chinese : ICO图标转换BMP格式English :(Conversion from ICO to BMP)--------------------------------------------------------varIcon : TIcon;Bitmap : TBitmap;beginIcon := TIcon.Create;Bitmap := TBitmap.Create;Icon.LoadFromFile('c:picture.ico');Bitmap.Width := Icon.Width;Bitmap.Height := Icon.Height;Bitmap.Canvas.Draw(0, 0, Icon );Bitmap.SaveToFile('c:picture.bmp');Icon.Free;Bitmap.Free;===================================2.Chinese: 32x32 BMP格式图象转换为ICO格式English :32x32 bit Bitmaps to ICO's-----------------------------------unit main;interfaceusesWindows, Messages, SysUtils, Classes, Graphics, Controls, Forms,Dialogs,ExtCtrls, StdCtrls;typeTForm1 = class(TForm)Button1: TButton;Image1: TImage;Image2: TImage;procedure Button1Click(Sender: TObject);procedure FormCreate(Sender: TObject);private{ Private declarations }public{ Public declarations }end;varForm1: TForm1;implementation{$R *.DFM}procedure TForm1.Button1Click(Sender: TObject);var winDC, srcdc, destdc : HDC;oldBitmap : HBitmap;iinfo : TICONINFO;beginGetIconInfo(Image1.Picture.Icon.Handle, iinfo);WinDC := getDC(handle);srcDC := CreateCompatibleDC(WinDC);destDC := CreateCompatibleDC(WinDC);oldBitmap := SelectObject(destDC, iinfo.hbmColor);oldBitmap := SelectObject(srcDC, iinfo.hbmMask);BitBlt(destdc, 0, 0, Image1.picture.icon.width,Image1.picture.icon.height,srcdc, 0, 0, SRCPAINT);Image2.picture.bitmap.handle := SelectObject(destDC, oldBitmap);DeleteDC(destDC);DeleteDC(srcDC);DeleteDC(WinDC);image2.Picture.Bitmap.savetofile(ExtractFilePath(Application.ExeName) + 'myfile.bmp');end;procedure TForm1.FormCreate(Sender: TObject);beginimage1.picture.icon.loadfromfile('c:myicon.ico');end;================================================================== 3. Chinese:转换BMP->JPEG文件格式Englsh:convert the bitmap into a JPEG file format------------------------------------------------------------------varMyJpeg: TJpegImage;Image1: TImage;beginImage1:= TImage.Create;MyJpeg:= TJpegImage.Create;Image1.LoadFromFile('TestImage.BMP'); // 读取Bitmap文件MyJpeg.Assign(Image1.Picture.Bitmap);objectMyJpeg.SaveToFile('MyJPEGImage.JPG'); //保存JPEGend;--------------------------------------------------------------------4.JPEG 转换为BMP函数procedure Jpg2Bmp(const source,dest:string);varMyJpeg: TJpegImage;bmp: Tbitmap;beginbmp:=tbitmap.Create;MyJpeg:= TJpegImage.Create;myjpeg.LoadFromFile(source);bmp.Assign(myjpeg);bmp.SaveToFile(dest);finallybmp.free;myjpeg.Free;end;end;----------------------------------------------------------5.Bmp转换为JPEG文件格式函数----------------------------------------------------------procedure Bmp2Jpg(const source,dest:string;const scale:byte); varMyJpeg: TJpegImage;Image1: TImage;beginImage1:= TImage.Create(application);MyJpeg:= TJpegImage.Create;tryImage1.Picture.Bitmap.LoadFromFile(source);MyJpeg.Assign(Image1.Picture.Bitmap);pressionQuality:=scale;press;MyJpeg.SaveToFile(dest);finallyimage1.free;myjpeg.Free;end;end;Delphi常见图象格式转换技术(二)1.TxT 转换为GIF2.WMF格式转换为BMP格式3.BMP格式转换为WMF格式4.TBitmaps to Windows Regions----------------------------------------------------------------------- TxT 转换为GIF------------------------------------------------procedure TxtToGif (txt, FileName: String);vartemp: TBitmap;GIF : TGIFImage;begintemp:=TBitmap.Create;trytemp.Height :=400;temp.Width :=60;temp.Transparent:=True;temp.Canvas.Brush.Color:=colFondo.ColorValue;:=Fuente.FontName;temp.Canvas.Font.Color:=colFuente.ColorValue;temp.Canvas.TextOut (10,10,txt);Imagen.Picture.Assign(nil);GIF := TGIFImage.Create;tryGIF.Assign(Temp);//保存GIFGIF.SaveToFile(FileName);Imagen.Picture.Assign (GIF);finallyGIF.Free;end;Finallytemp.Destroy;End;end;--------------------------------------------------------------------- 2.WMF格式转换为BMP格式-------------------------------------------------------------------- procedure WmfToBmp(FicheroWmf,FicheroBmp:string); varMetaFile:TMetafile;Bmp:TBitmap;beginMetafile:=TMetaFile.create;{Create a Temporal Bitmap}Bmp:=TBitmap.create;{Load the Metafile}MetaFile.LoadFromFile(FicheroWmf);{Draw the metafile in Bitmap's canvas}with Bmp dobeginHeight:=Metafile.Height;Width:=Metafile.Width;Canvas.Draw(0,0,MetaFile);{Save the BMP}SaveToFile(FicheroBmp);{Free BMP}Free;end;{Free Metafile}MetaFile.Free;end;--------------------------------------------------------------------- 3.BMP格式转换为WMF格式--------------------------------------------------------------------- procedure BmpToWmf (BmpFile,WmfFile:string);varMetaFile : TMetaFile;MFCanvas : TMetaFileCanvas;BMP : TBitmap;begin{Create temps}MetaFile := TMetaFile.Create;BMP := TBitmap.create;BMP.LoadFromFile(BmpFile);{Igualemos tama駉s}{Equalizing sizes}MetaFile.Height := BMP.Height;MetaFile.Width := BMP.Width;{Create a canvas for the Metafile} MFCanvas:=TMetafileCanvas.Create(MetaFile, 0); with MFCanvas dobegin{Draw the BMP into canvas}Draw(0, 0, BMP);{Free the Canvas}Free;end;{Free the BMP}BMP.Free;with MetaFile dobegin{Save the Metafile}SaveToFile(WmfFile);{Free it...}Free;end;end;---------------------------------------------------------------------4.TBitmaps to Windows Regions---------------------------------------------------------------------function BitmapToRegion(bmp: TBitmap; TransparentColor: TColor=clBlack; RedTol: Byte=1; GreenTol: Byte=1; BlueTol: Byte=1): HRGN;constAllocUnit = 100;typePRectArray = ^TRectArray;TRectArray = Array[0..(MaxInt div SizeOf(TRect))-1] of TRect;varpr: PRectArray;h: HRGN;RgnData: PRgnData;lr, lg, lb, hr, hg, hb: Byte;x,y, x0: Integer;b: PByteArray;ScanLinePtr: Pointer;ScanLineInc: Integer;maxRects: Cardinal;beginResult := 0;{ Keep on hand lowest and highest values for the "transparent" pixels }lr := GetRValue(TransparentColor);lg := GetGValue(TransparentColor);lb := GetBValue(TransparentColor);hr := Min($ff, lr + RedTol);hg := Min($ff, lg + GreenTol);hb := Min($ff, lb + BlueTol);bmp.PixelFormat := pf32bit;maxRects := AllocUnit;GetMem(RgnData,SizeOf(RGNDATAHEADER) + (SizeOf(TRect) * maxRects)); trywith RgnData^.rdh dobegindwSize := SizeOf(RGNDATAHEADER);iType := RDH_RECTANGLES;nCount := 0;nRgnSize := 0;SetRect(rcBound, MAXLONG, MAXLONG, 0, 0);end;ScanLinePtr := bmp.ScanLine[0];ScanLineInc := Integer(bmp.ScanLine[1]) - Integer(ScanLinePtr);for y := 0 to bmp.Height - 1 dobeginx := 0;while x < bmp.Width dobeginx0 := x;while x < bmp.Width dobeginb := @PByteArray(ScanLinePtr)[x*SizeOf(TRGBQuad)];// BGR-RGB: Windows 32bpp BMPs are made of BGRa quads (not RGBa)if (b[2] >= lr) and (b[2] <= hr) and(b[1] >= lg) and (b[1] <= hg) and(b[0] >= lb) and (b[0] <= hb) thenBreak; // pixel is transparentInc(x);end;{ test to see if we have a non-transparent area in the image }if x > x0 thenbegin{ increase RgnData by AllocUnit rects if we exceeds maxRects }if RgnData^.rdh.nCount >= maxRects thenbeginInc(maxRects,AllocUnit);ReallocMem(RgnData,SizeOf(RGNDATAHEADER) + (SizeOf(TRect) * MaxRects));end;{ Add the rect (x0, y)-(x, y+1) as a new visible area in the region }pr := @RgnData^.Buffer; // Buffer is an array of rectswith RgnData^.rdh dobeginSetRect(pr[nCount], x0, y, x, y+1);{ adjust the bound rectangle of the region if we are "out-of-bounds" }if x0 < rcBound.Left then rcBound.Left := x0;if y < rcBound.Top then rcBound.Top := y;if x > rcBound.Right then rcBound.Right := x;if y+1 > rcBound.Bottom then rcBound.Bottom := y+1;Inc(nCount);end;end; // if x > x0if RgnData^.rdh.nCount = 2000 thenbeginh := ExtCreateRegion(nil, SizeOf(RGNDATAHEADER) + (SizeOf(TRect) * maxRects), RgnData^);if Result > 0 thenbegin // Expand the current regionCombineRgn(Result, Result, h, RGN_OR);DeleteObject(h);endelse // First region, assign it to ResultResult := h;RgnData^.rdh.nCount := 0;SetRect(RgnData^.rdh.rcBound, MAXLONG, MAXLONG, 0, 0);end;Inc(x);end; // scan every sample byte of the imageInc(Integer(ScanLinePtr), ScanLineInc);end;{ need to call ExCreateRegion one more time because we could have left }{ a RgnData with less than 2000 rects, so it wasn't yet created/combined }h := ExtCreateRegion(nil, SizeOf(RGNDATAHEADER) + (SizeOf(TRect) * MaxRects), RgnData^);if Result > 0 thenbeginCombineRgn(Result, Result, h, RGN_OR);DeleteObject(h);endelseResult := h;finallyFreeMem(RgnData,SizeOf(RGNDATAHEADER) + (SizeOf(TRect) * MaxRects)); end;----------------------------------------------------------------------------------。

相关主题