delphi JPG或BMP图片透明显示
procedure SaveBmpAsIcon(const Bmp: TBitmap; const Icon: string; const SmallIcon: Boolean;
const Transparent: Boolean; const X, Y: Integer);
// Bmp : Bitmap图片
// Icon : 最终输出的icon文件全路径和文件名。如果文件已经存在则会将其覆盖
// SmallIcon : True: 16x16 图标, False: 32x32 图标
// Transparent: 确定是否按照参数X,Y的坐标色生成透明图标
// X, Y : 此参数指明坐标下的色值将会作为透明色替换全图
var
PBI, MPBI: PBitmapInfo;
IHS, MIHS, ImageSize, MImageSize: DWord;
bmBuffer, MaskBuffer: Pointer;
TID: TIconDir;
TBIH: TBitmapInfoHeader;
Bmx, Bmm: TBitmap;
TranspCol: TColor;
I, J: Integer;
begin
Bmx:= TBitmap.Create;
Bmm:= TBitmap.Create;
try
if SmallIcon then
begin
Bmx.Width:= GetSystemMetrics(SM_CXSMICON);
Bmx.Height:= GetSystemMetrics(SM_CYSMICON);
end
else
begin
Bmx.Width:= GetSystemMetrics(SM_CXICON);
Bmx.Height:= GetSystemMetrics(SM_CYICON);
end;
bmx.pixelformat:=pf24bit;
Bmx.Canvas.StretchDraw(Rect(, , Bmx.Width, Bmx.Height), Bmp);
TranspCol:= Bmx.Canvas.Pixels[X, Y];
//TranspCol:= clWhite;
Bmm.Assign(Bmx);
Bmm.Mask(TranspCol);
GetDIBSizes(Bmm.Handle, MIHS, MImageSize);
GetDIBSizes(Bmx.Handle, IHS, ImageSize);
MaskBuffer:= AllocMem(MImageSize);
bmBuffer:= AllocMem(ImageSize);
MPBI:= AllocMem(MIHS);
PBI:= AllocMem(IHS);
try
if Transparent then
begin
for I:= to Bmx.Width- do
for J:= to Bmx.Height- do
if Bmx.Canvas.Pixels[I, J] = TranspCol then Bmx.Canvas.Pixels[I, J]:= ;
with MPBI^.bmiHeader do
begin
biSize:= SizeOf(TBitmapInfoHeader);
biWidth:= Bmm.Width;
biHeight:= Bmm.Height;
biPlanes:= ;
biBitCount:= ;
biCompression:= BI_RGB;
biSizeImage:= MImageSize;
biXPelsPerMeter:= ;
biYPelsPerMeter:= ;
biClrUsed:= ;
biClrImportant:= ;
end;
GetDIBits(Bmm.Canvas.Handle, Bmm.Handle, , Bmm.height, MaskBuffer, MPBI^, DIB_RGB_COLORS);
end;
with PBI^.bmiHeader do
begin
biSize:= SizeOf(TBitmapInfoHeader);
biWidth:= Bmx.Width;
biHeight:= Bmx.Height;
biPlanes:= ;
biBitCount:= ;
biCompression:= BI_RGB;
biSizeImage:= ImageSize;
biXPelsPerMeter:= ;
biYPelsPerMeter:= ;
biClrUsed:= ;
biClrImportant:= ;
end;
GetDIBits(Bmx.Canvas.Handle, Bmx.Handle, , Bmx.Height, bmBuffer, PBI^, DIB_RGB_COLORS);
with TBIH do
begin
biSize:= ;
biWidth:= Bmx.Width;
biHeight:= Bmx.Height * ;
biPlanes:= ;
biBitCount:= ;
biCompression:= ;
biSizeImage:= ImageSize;
biXPelsPerMeter:= ;
biYPelsPerMeter:= ;
biClrUsed:= ;
biClrImportant:= ;
end;
with TID do
begin
idReserved:=;
idType:=;
idCount:=;
with idEntries[] do
begin
bWidth:=bmx.width;
bHeight:=bmx.height;
bColorCount:=;
bReserved:=;
wPlanes:=;
wBitCount:=;
dwBytesInRes:= SizeOf(TBitmapInfoHeader) + TBIH.biSizeImage + MImageSize;
dwImageOffset:= + TID.idCount * SizeOf(TIconDirEntry);
end;
end;
with TFileStream.Create(Icon, fmCreate) do
try
Write(TID, + TID.idCount * SizeOf(TIconDirEntry));
Write(TBIH, SizeOf(TBitmapInfoheader));
Write(bmBuffer^, TBIH.biSizeImage);
Write(maskBuffer^, MImageSize);
finally
Free;
end;
finally
FreeMem(MaskBuffer);
FreeMem(bmBuffer);
FreeMem(MPBI);
FreeMem(PBI);
end;
finally
Bmx.free;
Bmm.free;
end;
end;
delphi JPG或BMP图片透明显示的更多相关文章
- 用Delphi直接获取bmp图片的像素
用Delphi直接获取bmp图片的像素,并存储显示出.(此像素主要用在LED上显示).希望高手能给出代码啊!! function getImagePixels(f: string): Integer; ...
- VC++使用CImage PNG转BMP图片透明背景处理
PNG格式的图片是支持透明通道的,BMP格式的图片是没有透明通道的,所以当PNG格式的图片转换为BMP格式时,对于PNG图片的透明背景就需要进行特别的处理. VC++中的HBITMAP是支持透明色的, ...
- 提取bmp图片的颜色信息,可直接framebuffer显示(c版本与python版本)
稍微了解了下linux的framebuffer,这是一种很简单的显示接口,直接写入像素信息即可 配置好的内核,会有/dev/fbn 的接口,于是想能否提前生成一个文件,比如logo.fb,里面仅包含像 ...
- MFC对话框显示BMP图片
1.MFC对话框显示BMP图片我们先从简单的开始吧.先分一个类: (一) 非动态显示图片(即图片先通过资源管理器载入,有一个固定ID) (二) 动态载入图片(即只需要在程序中指定图片的路径即可载入) ...
- Python中通过Image的open之后,去show结果打不开bmp图片,无法正常显示图片
在windows的cmd命令行下,使用Python的PIL库打开并显示一个jpg图片: ? 1 2 3 openedImg = Image.open(saveToFile); print " ...
- bmp图片显示
文件IO项目: 在开发板屏幕上循环显示目录里的图片 a.按照一定的间隔循环显示目录里的bmp图片 b.实现手指滑动来显示目录里的图片(bmp,jpg)上一张,下一张 d1: 1.能操控屏幕(查询开发板 ...
- [转]opengl入门例题(读取bmp图片,并显示)
#include<gl/glut.h> #define FileName "bliss.bmp" static GLint imagewidth; static GLi ...
- Delphi 读取 c# webservice XML的base64编码图片字符串转化图片并显示
Delphi 读取 c# webservice XML的base64编码图片字符串转化图片并显示 在 开发中遇到应用c#及asp.net的在的webservice 保存图片并以xml文件形式现实出来 ...
- Linux framebuffer显示bmp图片【转】
本文转载自:http://blog.csdn.net/luxiaoxun/article/details/7622988 framebuffer简介 帧缓冲(framebuffer)是Linux为显示 ...
随机推荐
- JS实现 类似图片3D效果
其实这样的效果 目前很多网站上都有 其实以前也写过一个 只是当时代码只是为了实现而已,代码很乱,所以现在有业余时间研究了下,其实也并没有什么特殊地方 很类似于左右控制按钮切换图片的思路.效果如下: 可 ...
- VB CompactDatabase 压缩/修复数据库
Option Explicit Private Sub Command1_Click() On Error GoTo err Dim DbEngine, dbFile As String dbFile ...
- 20155331《网络对抗》Exp7 网络欺诈防范
20155331<网络对抗>Exp7 网络欺诈防范 实验内容 本实践的目标理解常用网络欺诈背后的原理,以提高防范意识,并提出具体防范方法.具体实践有: 简单应用SET工具建立冒名网站 et ...
- 20155334 曹翔 Exp3 免杀原理与实践
20155334 曹翔 Exp3 免杀原理与实践 小记:这次实验,困难重重,失败练练,搞得我们是心急如焚,焦头烂额,哭爹喊娘 一.基础问题回答 杀软是如何检测出恶意代码的? 每个杀软都有自己的检测库, ...
- 利用git将项目上传到github
本文主要介绍如果用git将项目上传到githup. 一.准备工作 (1)欲将项目上传到githup,先在githup上新建一个仓库.这里就不介绍. (2 ...
- 牛客网NOIP赛前集训营-提高组(第八场)-B-推箱子[最短路优化建图]
题意 有 \(n\) 个箱子,指定一个箱子开始向右推,如果碰到了别的箱子会令其移动,问 \(k\) 秒之后每个箱子所在的位置. \(n\leq 10^5\). 分析 转化成最短路模型,如果两个箱子 \ ...
- storm从入门到放弃(三),放弃使用 StreamId 特性
序:StreamId是storm中实现DAG有向无环图的重要一个特性,但是从实际生产环境来看,这个功能其实蛮影响生产环境的稳定性的,我们系统在迭代时会带来整体服务的不可用. StreamId是stor ...
- jstree API
https://www.jstree.com/ drag & drop support(拖放) keyboard navigation(键盘导航) inline edit, create ...
- 阿里云centos 安装禅道
下载 我的阿里云服务器系统是 centos6.8 64 位,下载的禅道版本是 Linux 64位一键安装包(适用于Linux 64位) 由于阿里云服务器没桌面,所以下载用不了浏览器,可考虑在本地下载后 ...
- 使用unity3d和tensorflow实现基于姿态估计的体感游戏
使用unity3d和tensorflow实现基于姿态估计的体感游戏 前言 之前做姿态识别,梦想着以后可以自己做出一款体感游戏,然而后来才发现too young.但是梦想还是要有的,万一实现了呢.趁着p ...