Try
                    icon := TIcon.Create;
                    icon.Assign(image1.Picture.Bitmap ); --執行到這一行就會出錯.
                    icon.SaveToFile(ChangeFileExt(SaveDialog1.FileName,'.ICO') );
                Finally
                    icon.Free ;
                end;  
這是怎么回事?

解决方案 »

  1.   

    procedure BmpToIco(ABmp, AIco: string);
    var
      bmp{, mbmp}: tbitmap;
      ico: ticon;
      rbmp: BITMAP;
      a: array[0..4096] of byte;
      len: dword;
      i: integer;
      imglist: timagelist;
    begin
      bmp := tbitmap.Create;
      //mbmp := tbitmap.Create;
      ico := ticon.Create;
      try
        bmp.LoadFromFile(abmp);
        imglist := TImageList.CreateSize(bmp.Width, bmp.Height);
        try
          //mbmp.Assign(bmp);
          len := GetBitmapBits(bmp.Handle, 4096, @a);
          //mbmp.Handle := CreateBitmapIndirect(rbmp);
          for i := 0 to len do
            a[i] := a[i] and a[i];
          SetBitmapBits(bmp.Handle, len, @a);
          //imglist.add(bmp, mbmp);
          imglist.Add(bmp,nil);
          imglist.GetIcon(0, ico);
          ico.SaveToFile(AIco);
        finally
          imglist.Free;
        end;
      finally
        bmp.Free;
        ico.Free;
      end;
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      BmpToIco('c:\P1.bmp', 'c:\p1.ico');
    end;