亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Delphi > 正文

Delphi常見圖象格式轉換技術(二)

2019-11-18 18:47:43
字體:
來源:轉載
供稿:網友

Delphi常見圖象格式轉換技術(二)
作者:lyboy99
e-mail:lyboy99@sina.com  
url: http://hnh.126.com

給大家提供幾個常用的圖象格式轉換方法和其轉換函數
希望可以對你有幫助

1.TxT 轉換為 GIF
2.WMF格式轉換為BMP格式
3.BMP格式轉換為WMF格式
4.TBitmaps to Windows Regions
-----------------------------------------------------------------------
TxT 轉換為 GIF
------------------------------------------------
PRocedure TxtToGif (txt, FileName: String);
var
    temp: TBitmap;
    GIF : TGIFImage;
begin

temp:=TBitmap.Create;
try
        temp.Height     :=400;
        temp.Width      :=60;
        temp.Transparent:=True;
        temp.Canvas.Brush.Color:=colFondo.ColorValue;
        temp.Canvas.Font.Name:=Fuente.FontName;
        temp.Canvas.Font.Color:=colFuente.ColorValue;
        temp.Canvas.TextOut (10,10,txt);
        Imagen.Picture.Assign(nil);

      GIF := TGIFImage.Create;
      try
       
        GIF.Assign(Temp);
        //保存 GIF
        GIF.SaveToFile(FileName);
        Imagen.Picture.Assign (GIF);
     finally
        GIF.Free;
      end;

Finally

        temp.Destroy;
End;
end;
---------------------------------------------------------------------
2.WMF格式轉換為BMP格式

--------------------------------------------------------------------
procedure WmfToBmp(FicheroWmf,FicheroBmp:string); 
var 
  MetaFile:TMetafile; 
  Bmp:TBitmap; 
begin 
  Metafile:=TMetaFile.create; 
  {Create a Temporal Bitmap} 
  Bmp:=TBitmap.create; 
  {Load the Metafile} 
  MetaFile.LoadFromFile(FicheroWmf); 
  {Draw the metafile in Bitmap's canvas} 
  with Bmp do 
  begin 
   Height:=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); 
var 
  MetaFile : TMetaFile; 
  MFCanvas : TMetaFileCanvas; 
  BMP : TBitmap; 
begin 
  {Create temps} 
  MetaFile := TMetaFile.Create; 
  BMP := TBitmap.create; 
  BMP.LoadFromFile(BmpFile); 
  {Igualemos tama?os} 
  {Equalizing sizes} 
  MetaFile.Height := BMP.Height; 
  MetaFile.Width := BMP.Width; 
  {Create a canvas for the Metafile} 
  MFCanvas:=TMetafileCanvas.Create(MetaFile, 0); 
  with MFCanvas do 
  begin 
  {Draw the BMP into canvas} 
  Draw(0, 0, BMP); 
  {Free the Canvas} 
  Free; 
  end; 
  {Free the BMP} 
  BMP.Free; 
  with MetaFile do 
  begin 
  {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;
const
  AllocUnit = 100;
type
  PRectArray = ^TRectArray;
  TRectArray = Array[0..(MaxInt div SizeOf(TRect))-1] of TRect;
var
  pr: PRectArray;   
  h: HRGN;         
  RgnData: PRgnData;
  lr, lg, lb, hr, hg, hb: Byte;
  x,y, x0: Integer; 
  b: PByteArray;   
  ScanLinePtr: Pointer;
  ScanLineInc: Integer;
  maxRects: Cardinal;  
begin
  Result := 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));
  try
    with RgnData^.rdh do
    begin
      dwSize := 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 do
    begin
      x := 0;
      while x < bmp.Width do
      begin
        x0 := x;
        while x < bmp.Width do
        begin
          b := @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) then
            Break; // pixel is transparent
          Inc(x);
        end;
        { test to see if we have a non-transparent area in the image }
        if x > x0 then
        begin
          { increase RgnData by AllocUnit rects if we exceeds maxRects }
          if RgnData^.rdh.nCount >= maxRects then
          begin
            Inc(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 rects
          with RgnData^.rdh do
          begin
            SetRect(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 > x0
      
       
        if RgnData^.rdh.nCount = 2000 then
        begin
          h := ExtCreateRegion(nil, SizeOf(RGNDATAHEADER) + (SizeOf(TRect) * maxRects), RgnData^);
          if Result > 0 then
          begin // Expand the current region
            CombineRgn(Result, Result, h, RGN_OR);
            DeleteObject(h);
          end
          else  // First region, assign it to Result
            Result := h;
          RgnData^.rdh.nCount := 0;
          SetRect(RgnData^.rdh.rcBound, MAXLONG, MAXLONG, 0, 0);
        end;
        Inc(x);
      end; // scan every sample byte of the image
      Inc(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 then
    begin
      CombineRgn(Result, Result, h, RGN_OR);
      DeleteObject(h);
    end
    else
      Result := h;
  finally
    FreeMem(RgnData,SizeOf(RGNDATAHEADER) + (SizeOf(TRect) * MaxRects));
  end;

----------------------------------------------------------------------------------


上一篇:Delphi下常用數學運算函數

下一篇:Delphi下常用轉換(一)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
學習交流
熱門圖片

新聞熱點

疑難解答

圖片精選

網友關注

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
最近中文字幕2019免费| 亚洲图片欧洲图片av| 久久影院模特热| 久久久久女教师免费一区| 欧美日韩久久久久| 91国偷自产一区二区三区的观看方式| 国产精品成人品| 国产精品久久久久久久久久免费| 精品女同一区二区三区在线播放| 少妇av一区二区三区| 一本一本久久a久久精品综合小说| 国产精品久久久久久久久影视| 欧美理论片在线观看| 日韩视频精品在线| 欧美丝袜美女中出在线| xvideos国产精品| 亚洲第一福利在线观看| 国产99久久精品一区二区 夜夜躁日日躁| 97视频人免费观看| 国产午夜精品一区理论片飘花| 一区二区欧美日韩视频| 亚洲成人av资源网| 亚洲男人天堂2023| 欧美专区在线视频| www国产精品视频| 日韩精品中文字幕在线| 国产精品亚洲激情| 久久久国产精品亚洲一区| 精品国内产的精品视频在线观看| 裸体女人亚洲精品一区| 永久免费毛片在线播放不卡| 成人黄色片在线| 国产精品久久久久影院日本| 欧美精品久久久久久久久| 国产精品永久免费在线| 国内免费久久久久久久久久久| 欧美在线一级va免费观看| 成人av电影天堂| 性色av一区二区三区红粉影视| 精品毛片网大全| 日韩在线精品视频| 精品久久久久久久久中文字幕| 欧美激情一区二区三区在线视频观看| 日韩h在线观看| 欧美精品免费在线观看| www.亚洲一区| 国产一区二区激情| 国产精品久久久久免费a∨大胸| 成人性生交大片免费看视频直播| 国产91|九色| 两个人的视频www国产精品| 国产97色在线|日韩| 欧美精品福利在线| 性色av一区二区三区红粉影视| 欧美色欧美亚洲高清在线视频| 亚洲乱码国产乱码精品精天堂| 久久成人免费视频| 欧美激情一二区| 岛国av一区二区| 欧美巨大黑人极品精男| 欧美日韩一二三四五区| 亚洲开心激情网| 国产精品视频久| 久久久av亚洲男天堂| 欧美性xxxxxx| 亚洲一区二区三区成人在线视频精品| 亚洲自拍av在线| 欧美精品性视频| 91在线播放国产| 日韩欧美国产网站| 在线免费看av不卡| 欧美激情高清视频| 亚洲第一区中文99精品| 91免费欧美精品| 2021久久精品国产99国产精品| 亚洲日本中文字幕| 在线电影中文日韩| 亚洲精品中文字幕av| 韩国精品久久久999| 亚洲综合社区网| 久久精品这里热有精品| 欧美巨乳美女视频| 国产91成人在在线播放| 久久福利网址导航| 国产精品无av码在线观看| 国产一区二区三区欧美| 在线观看国产成人av片| 日韩在线免费av| 日韩中文字幕视频| 欧美日韩激情视频8区| 国产精品综合不卡av| 2019中文字幕全在线观看| 成人高清视频观看www| 亚洲国模精品一区| 国产精品电影久久久久电影网| 精品偷拍一区二区三区在线看| 亚洲精品suv精品一区二区| 两个人的视频www国产精品| 日韩av影片在线观看| 国内精品久久久久| 国产精品久久久久9999| 国产精品稀缺呦系列在线| 日韩中文字幕第一页| 在线观看日韩视频| 麻豆乱码国产一区二区三区| 亚洲精品日韩欧美| 福利一区福利二区微拍刺激| 日韩中文字在线| 国产视频欧美视频| 亚洲国产日韩欧美在线动漫| 国产精品69久久久久| 成人黄色av免费在线观看| 国产成人精品在线视频| 九九精品视频在线观看| 国产精品成人国产乱一区| 欧美在线观看视频| 在线视频一区二区| 亚洲日本aⅴ片在线观看香蕉| 亚洲aa在线观看| 欧美激情第三页| 日韩中文字幕免费| 欧美肥婆姓交大片| www.亚洲男人天堂| 国产免费成人av| 日韩精品一区二区三区第95| 欧美乱妇40p| 九九热r在线视频精品| 国产精品美女免费看| 国产v综合ⅴ日韩v欧美大片| 久久久久久97| 国产成人精品一区二区三区| 亚洲天堂av女优| 欧美日韩成人在线视频| 国产成人福利网站| 国产精品wwwwww| 欧美xxxx14xxxxx性爽| 亚洲a中文字幕| 欧美久久精品一级黑人c片| 欧美激情18p| 亚洲美女在线视频| 色综合久综合久久综合久鬼88| 国产精品三级久久久久久电影| 精品久久久一区| 免费不卡在线观看av| 亚洲一区精品电影| 日韩中文第一页| 亚洲欧美日韩中文在线| 亚洲www永久成人夜色| 欧美精品第一页在线播放| 黑人狂躁日本妞一区二区三区| 91精品国产综合久久香蕉最新版| 亚洲精品国产精品久久清纯直播| 成人国产在线激情| 国产日韩在线亚洲字幕中文| 国内精品在线一区| 国产精品成人aaaaa网站| 久久韩剧网电视剧| 日韩精品日韩在线观看| 国产精品久久久av久久久| 人人做人人澡人人爽欧美| 中文字幕精品一区久久久久| 久久国产精品免费视频| 亚洲香蕉伊综合在人在线视看| 国产美女91呻吟求|