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为显示 ...
随机推荐
- OpenCV——图像的深度与通道数讲解
矩阵数据类型: – CV_(S|U|F)C S = 符号整型 U = 无符号整型 F = 浮点型 E.g.: CV_8UC1 是指一个8位无符号整型单通道矩阵, CV_32FC2是指一个32位浮点型双 ...
- MySQL数据类型字节长度
1.字符串 char(n): n 字节长度 varchar(n): 如果是 utf8 编码, 则是 3 n + 2字节; 如果是 utf8mb4 编码, 则是 4 n + 2 字节. 2.数值类型: ...
- CentOS中配置CDH版本的ZooKeeper
三台CentOS:Host0,Host1,Host2 在三台中分别安装zookeeper-server yum install zookeeper-server -y 修改zookeeper的配置文件 ...
- 将myeclipse中不适用的插件禁用掉
转载地址http://blog.csdn.net/yuanboitliuyuan/article/details/7360553 去掉启动时不用的插件启动: 操作方法: windows->pre ...
- [HEOI2012]采花 BZOJ2743
分析: 听说主席树和莫队可以做,前者不想写,后者我不会... 我们考虑将询问离线,按照左端点排序,之后先处理好从1开始选的答案,之后枚举从1到n,之后依次删除nxt[i],添加nxt[nxt[i]], ...
- OSS介绍
1 基本概念介绍 1.1 存储空间(Bucket) 存储空间是您用于存储对象(Object)的容器,所有的对象都必须隶属于某个存储空间.您可以设置和修改存储空间属性用来控制地域.访问权限.生命周期等, ...
- MS SQL Server字符拆分函数
Insus.NET以前有用XQuery的nodes()方法写过一个函数,是MS SQL字符拆分的函数,http://www.cnblogs.com/insus/archive/2012/02/26/2 ...
- 20155213免考项目——bof进阶及简易的HIDAttack
20155213免考项目--bof进阶及简易的HIDAttack 目录 序 任务一:构造Shellcode(64位) 任务二:64位Shellcode的注入 任务三:32位及64位bof攻击(开启堆栈 ...
- 20155222卢梓杰 实验一 逆向及Bof基础
实验一 逆向及Bof基础 1.实验对象为32位可执行文件pwn1,这个程序主要有main.foo.getshell这三个函数,其中foo函数功能为输出输入的字符串,getshell函数功能为打开一个s ...
- Tengine 添加第三方监控模块nginx-module-vts
一.概述 除nginx官网源码提供的各种模板,nginx还有第三方模块.官方文档中也列出了nginx的很多第三方模块,除官网之外,还有很多的有用的模块也能在Github上找到. 官网第三方模块地址:h ...