可不可以把BMP转成ICO

xiaohan13916830 2002-05-24 09:16:53
同上,;谢谢指点^_^
...全文
97 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaohan13916830 2002-05-29
  • 打赏
  • 举报
回复
谢谢大家!
skyhole 2002-05-28
  • 打赏
  • 举报
回复
用ExTractIconEx() 然后查帮助文件确定参数。

如果没找到API的帮助文件,去BCB的安装盘上把WIN32那个帮助文件弄下来
Billy_Chen28 2002-05-28
  • 打赏
  • 举报
回复
关于ICO转换(bmp->ico):

if(hBit == NULL) // hBit is BitMap Handle
return NULL;

CBitmap oBitmap;
oBitmap.Attach(hBit);

CBitmap oBMap;
BITMAP rBitMap;
oBitmap.GetBitmap( &rBitMap );
oBMap.CreateBitmapIndirect( &rBitMap );
BYTE a[4096];
DWORD len = oBitmap.GetBitmapBits (4096,a);
for (UINT i=0; i<len; i++)
{
a[i] ^= a[i];
}
oBMap.SetBitmapBits( len, a);

HICON hIcon;
if (bTheBigIcon)
{
CImageList oImagelist;
oImagelist.Create(32, 32, TRUE, 1, 1);
oImagelist.Add(&oBitmap, &oBMap);

hIcon = oImagelist.ExtractIcon( 0 );
oImagelist.DeleteImageList();
}
else
{
CImageList oImagelist;
oImagelist.Create(16, 16, TRUE, 1, 1);
oImagelist.Add(&oBitmap, &oBMap);

hIcon = oImagelist.ExtractIcon( 0 );
oImagelist.DeleteImageList();
}
m_bIcon = false;
return hIcon;

guolinchao 2002-05-28
  • 打赏
  • 举报
回复
好象可以用ChangFileExt();
AnsiString __fastcall ChangeFileExt(const AnsiString FileName,const AnsiString Extension);
王集鹄 2002-05-28
  • 打赏
  • 举报
回复
//for Delphi
function BmpToIco(mBitmap: TBitmap; mIcon: TIcon;
mSize32: Boolean = True): Boolean;
var
vIconWidth: Integer;
vIconHeight: Integer;
vBitmapMask: TBitmap;
vBitmapColor: TBitmap;
vIconInfo: TIconInfo;
begin
Result := True;
if mSize32 then begin
vIconWidth := 32;
vIconHeight := 32;
end else begin
vIconWidth := 16;
vIconHeight := 16;
end;

vBitmapMask := TBitmap.Create;
vBitmapColor := TBitmap.Create;
try
vBitmapMask.Width := vIconWidth;
vBitmapMask.Height := vIconHeight;
vBitmapMask.Canvas.Brush.Color := clBlack;
vBitmapMask.Canvas.Rectangle(0, 0, vIconWidth, vIconHeight);

vBitmapColor.Width := vIconWidth;
vBitmapColor.Height := vIconHeight;
StretchBlt(vBitmapColor.Canvas.Handle, 0, 0, vIconWidth, vIconHeight,
mBitmap.Canvas.Handle, 0, 0, mBitmap.Width, mBitmap.Height, SRCCOPY);

vIconInfo.fIcon := True;
vIconInfo.xHotspot := 0;
vIconInfo.yHotspot := 0;
vIconInfo.hbmMask := vBitmapMask.Handle;
vIconInfo.hbmColor := vBitmapColor.Handle;
mIcon.Handle := CreateIconIndirect(vIconInfo);
except
Result := False;
end;
vBitmapMask.Free;
vBitmapColor.Free;
end; { BmpToIco }

//for Borland C++ Builder
bool BmpToIco(Graphics::TBitmap* mBitmap, TIcon* mIcon, bool mSize32 = true)
{
///////begin var
int vIconWidth;
int vIconHeight;
Graphics::TBitmap* vBitmapMask;
Graphics::TBitmap* vBitmapColor;
TIconInfo vIconInfo;
///////end var
if ((mBitmap == NULL) || (mIcon == NULL)) return false;
if (mSize32) {
vIconWidth = 32;
vIconHeight = 32;
} else {
vIconWidth = 16;
vIconHeight = 16;
};

vBitmapMask = new Graphics::TBitmap;
vBitmapColor = new Graphics::TBitmap;
try {
vBitmapMask->Width = vIconWidth;
vBitmapMask->Height = vIconHeight;
vBitmapMask->Canvas->Brush->Color = clBlack;
vBitmapMask->Canvas->Rectangle(0, 0, vIconWidth, vIconHeight);

vBitmapColor->Width = vIconWidth;
vBitmapColor->Height = vIconHeight;
StretchBlt(vBitmapColor->Canvas->Handle, 0, 0, vIconWidth, vIconHeight,
mBitmap->Canvas->Handle, 0, 0, mBitmap->Width, mBitmap->Height, SRCCOPY);

vIconInfo.fIcon = true;
vIconInfo.xHotspot = 0;
vIconInfo.yHotspot = 0;
vIconInfo.hbmMask = vBitmapMask->Handle;
vIconInfo.hbmColor = vBitmapColor->Handle;
mIcon->Handle = CreateIconIndirect(&vIconInfo);
} __finally {
delete vBitmapMask;
delete vBitmapColor;
};
return true;
} /* BmpToIco */
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
BmpToIco(Image1->Picture->Bitmap, Image2->Picture->Icon);
}
//---------------------------------------------------------------------------
王集鹄 2002-05-28
  • 打赏
  • 举报
回复
//for Delphi
function BmpToIco(mBitmap: TBitmap; mIcon: TIcon;
mSize32: Boolean = True): Boolean;
var
vIconWidth: Integer;
vIconHeight: Integer;
vBitmapMask: TBitmap;
vBitmapColor: TBitmap;
vIconInfo: TIconInfo;
begin
Result := True;
if mSize32 then begin
vIconWidth := 32;
vIconHeight := 32;
end else begin
vIconWidth := 16;
vIconHeight := 16;
end;

vBitmapMask := TBitmap.Create;
vBitmapColor := TBitmap.Create;
try
vBitmapMask.Width := vIconWidth;
vBitmapMask.Height := vIconHeight;
vBitmapMask.Canvas.Brush.Color := clBlack;
vBitmapMask.Canvas.Rectangle(0, 0, vIconWidth, vIconHeight);

vBitmapColor.Width := vIconWidth;
vBitmapColor.Height := vIconHeight;
StretchBlt(vBitmapColor.Canvas.Handle, 0, 0, vIconWidth, vIconHeight,
mBitmap.Canvas.Handle, 0, 0, mBitmap.Width, mBitmap.Height, SRCCOPY);

vIconInfo.fIcon := True;
vIconInfo.xHotspot := 0;
vIconInfo.yHotspot := 0;
vIconInfo.hbmMask := vBitmapMask.Handle;
vIconInfo.hbmColor := vBitmapColor.Handle;
mIcon.Handle := CreateIconIndirect(vIconInfo);
except
Result := False;
end;
vBitmapMask.Free;
vBitmapColor.Free;
end; { BmpToIco }

//for Borland C++ Builder
bool BmpToIco(Graphics::TBitmap* mBitmap, TIcon* mIcon, bool mSize32 = true)
{
///////begin var
int vIconWidth;
int vIconHeight;
Graphics::TBitmap* vBitmapMask;
Graphics::TBitmap* vBitmapColor;
TIconInfo vIconInfo;
///////end var
if ((mBitmap == NULL) || (mIcon == NULL)) return false;
if (mSize32) {
vIconWidth = 32;
vIconHeight = 32;
} else {
vIconWidth = 16;
vIconHeight = 16;
};

vBitmapMask = new Graphics::TBitmap;
vBitmapColor = new Graphics::TBitmap;
try {
vBitmapMask->Width = vIconWidth;
vBitmapMask->Height = vIconHeight;
vBitmapMask->Canvas->Brush->Color = clBlack;
vBitmapMask->Canvas->Rectangle(0, 0, vIconWidth, vIconHeight);

vBitmapColor->Width = vIconWidth;
vBitmapColor->Height = vIconHeight;
StretchBlt(vBitmapColor->Canvas->Handle, 0, 0, vIconWidth, vIconHeight,
mBitmap->Canvas->Handle, 0, 0, mBitmap->Width, mBitmap->Height, SRCCOPY);

vIconInfo.fIcon = true;
vIconInfo.xHotspot = 0;
vIconInfo.yHotspot = 0;
vIconInfo.hbmMask = vBitmapMask->Handle;
vIconInfo.hbmColor = vBitmapColor->Handle;
mIcon->Handle = CreateIconIndirect(&vIconInfo);
} __finally {
delete vBitmapMask;
delete vBitmapColor;
};
return true;
} /* BmpToIco */
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
BmpToIco(Image1->Picture->Bitmap, Image2->Picture->Icon);
}
//---------------------------------------------------------------------------
redsuns2001 2002-05-28
  • 打赏
  • 举报
回复
《程序员》Borland专刊中有提到。----Delphi常见图象格式转换技术。
紫色狂澜 2002-05-27
  • 打赏
  • 举报
回复
用ExTractIconEx()
参数index=0
搞定
dealxl 2002-05-26
  • 打赏
  • 举报
回复
何苦呢,直接用Imagelist,会帮你把位图分割掉,直接用在程序里。或者用Borland赠送的ImageEditor完全可以了啊
xiaohan13916830 2002-05-26
  • 打赏
  • 举报
回复
如果编程怎样实现?
shymeng 2002-05-24
  • 打赏
  • 举报
回复
在网上下载Iconcool吧,可以转换,功能强大得很...

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧