这种png的png图片怎么打开做到的

下次自动登录
现在的位置:
& 综合 & 正文
用PNG透明图片和GDI+做不规则透明窗体
GDI+的应用使得平面图形图象编程变的更加容易,本文以一个基于对话框的时钟为例,在VC6.0中调用*.png图片实现半透明渐变窗口,该程序实现了指针式和数字式两种时钟显示方式。窗口实现了半透明渐变窗口、窗口拖动无移动矩形框、隐藏了任务栏窗体按钮等。
效果图如下:
图一 程序执行后与WindowXP桌面背景效果图
二、准备工作
1、图片资源准备工作。首先在Photoshop中编辑好时钟的背景、时针、分针以及数字时钟显示方式的所有图片,如下图:将这些图片保存成为带透明通道的.png格式(GDI+调用显示时能够透明调背景)。这样程序中图片资源就准备好了。
2、下面开始做好在VC6.0下展开此项工作的基本准备工作。
(1)、下载gdiplus forVC6.0的SDK,(总共两兆多)
(2)、在C盘建立文件夹“GDI+”将开发包拷贝在里面,亦即建立如下路径,以便例子顺利编译(当然你可以放到任意你喜欢的地方,只要在你的Project中正确包含路径即可!)。
C:\GDI+\Includes
C:\GDI+\Lib
C:\GDI+\gdiplus.dl
(3)在stdAfx.h中添加对GDI+环境的设置
ULONG_PTR unsigned long*
5.#include
"c:\gdi+\includes\gdiplus.h" ////请修改为你的头文件路径
6.using namespace G
comment(lib, "c:\\gdi+\\lib\\gdiplus.lib") ////请修改为你的.lib文件路径
(4)在GDIPClock.cpp中编辑app的InitInstance()中添加如下代码进行GDI+的初始化工作
1.GdiplusStartupInput
gdiplusStartupI
2.ULONG_PTR gdiplusT
3.GdiplusStartup(&gdiplusToken,
&gdiplusStartupInput, NULL);
7.GdiplusShutdown(gdiplusToken);
三、程序的实现全过程
1、建立一个基于对话框的Project,这里的名称为GDIPClock
2、在GDIPClockDlg.h中定义所有类成员变量,包括所有图片的指针和图片的长宽尺寸信息。
*m_pImageC
*m_pImageClock1;
*m_pImageHH
*m_pImageHM
*m_pImageHS
*m_pImageN
07.int m_BakWidth
08.int m_HourWidth,
09.int m_MinuWidth
10.int m_SecWidth
11.HINSTANCE hFuncInst
12.Typedef
BOOL (WINAPI*MYFUNC)(HWND,HDC,POINT*,SIZE*,HDC,POINT*,
13.COLORREF,BLENDFUNCTION*,DWORD);
UpdateLayeredW
在这一步中需要特别说明的是,在创建透明窗口式需要调用一个Windows API函数UpdateLayeredWindow(),该函数在.net以上的版本的SDK中有申明,但是在VC6.0下要调用要么下载200多兆的高版本SDK,要么从动态链接库“User32.dll”中调用,这里选择从“User32.dll”中调用。以上定义中后三项就是为此作准备的。
3、在对话框的OnCreate()中添加如下代码:对2的函数和成员变量进行初始化!(其中ImageFromIDResource()函数为从资源中载入Png图像的一个方法!)
01.int CGDIPClockDlg::OnCreate(LPCREATESTRUCT
lpCreateStruct)
03.if (CDialog::OnCreate(lpCreateStruct)
04.return -1;
05.hFuncInst
= LoadLibrary("User32.DLL");
06.BOOL bRet=FALSE;
07.if(hFuncInst)
08.UpdateLayeredWindow=(MYFUNC)GetProcAddress(hFuncInst,"UpdateLayeredWindow");
11.AfxMessageBox("User32.dll
12.exit(0);
16.m_Blend.BlendOp=0;
17.m_Blend.BlendFlags=0;
18.m_Blend.AlphaFormat=1;
19.m_Blend.SourceConstantAlpha=255;
26.ImageFromIDResource(IDR_PNGBAK1,"PNG",m_pImageClock1);
27.ImageFromIDResource(IDR_PNGNUM,"PNG",m_pImageNum);
28.ImageFromIDResource(IDR_PNGBAK,"PNG",m_pImageClock);
29.ImageFromIDResource(IDR_PNGHOUR,"PNG",m_pImageHHour);
30.ImageFromIDResource(IDR_PNGMIN,"PNG",m_pImageHMinu);
31.ImageFromIDResource(IDR_PNGSEC,"PNG",m_pImageHSec);
32.m_BakWidth
=m_pImageClock-&GetWidth();
33.m_BakHeight
=m_pImageClock-&GetHeight();
34.m_HourWidth
=m_pImageHHour-&GetWidth();
35.m_HourHeight=m_pImageHHour-&GetHeight();
36.m_MinuWidth
=m_pImageHMinu-&GetWidth();
37.m_MinuHeight=m_pImageHMinu-&GetHeight();
38.m_SecWidth
=m_pImageHSec-&GetWidth();
39.m_SecHeight
=m_pImageHSec-&GetHeight();
40.::SetWindowPos(m_hWnd,
HWND_TOPMOST,0,0,m_BakWidth,m_BakHeight,
41.SWP_NOSIZE|SWP_NOMOVE);
42.return 0;
4.在OnInitDialog()种添加如下代码对调用透明窗体初始化和设置时钟进行刷新,代码意义有注解:
02.UpdateClockDisplay();
03.SetTimer(1,500,NULL);
05.ModifyStyleEx
(WS_EX_APPWINDOW,WS_EX_TOOLWINDOW );
06.void CGDIPClockDlg::OnTimer(UINT nIDEvent)
09.UpdateClockDisplay();
10.CDialog::OnTimer(nIDEvent);
5、透明窗体创建于刷新,均调用以下函数完成,函数的参数表示整个窗体的透明度
在该函数中包括了GDI+中对Image.DrawImage()函数的集中重载方式的使用,还有在GDI+中图像变换矩阵的使用初步研究。
001.BOOL CGDIPClockDlg::UpdateClockDisplay(int Transparent)
003.HDC hdcTemp=GetDC()-&m_hDC;
004.m_hdcMemory=CreateCompatibleDC(hdcTemp);
005.HBITMAP hBitMap=CreateCompatibleBitmap(hdcTemp,m_BakWidth,m_BakHeight);
006.SelectObject(m_hdcMemory,hBitMap);
007.if(Transparent&0||Transparent&100)
Transparent=100;
009.m_Blend.SourceConstantAlpha=int(Transparent*2.55);
010.HDC hdcScreen=::GetDC
012.GetWindowRect(&rct);
ptWinPos={rct.left,rct.top};
014.Graphics
graph(m_hdcMemory);
points[] = { Point(0, 0),
017.Point(m_BakWidth,
018.Point(0,
m_BakHeight)
020.static bool bFly=false;
021.bFly?graph.DrawImage(m_pImageClock,
points, 3): graph.DrawImage(m_pImageClock1, points, 3);
022.bFly=!bF
023.int OxyX=140;
024.int OxyY=90;
025.SYSTEMTIME
026.GetLocalTime(&SystemTime);
029.Matrix
matrixH(1,0,0,1,OxyX,OxyY);
031.matrixH.Rotate(SystemTime.wHour*30+SystemTime.wMinute/2.0-180);
pointsH[] = { Point(0, 0),Point(m_HourWidth, 0),Point(0, m_HourHeight)};
033.matrixH.Translate(-m_HourWidth/2,-m_HourHeight/6);
035.matrixH.TransformPoints(
pointsH, 3);
036.graph.DrawImage
(m_pImageHHour,pointsH, 3);
039.Matrix
matrixM(1,0,0,1,OxyX,OxyY);
041.matrixM.Rotate(SystemTime.wMinute*6-180);
pointsM[] = { Point(0, 0),Point(m_MinuWidth, 0),Point(0, m_MinuHeight)};
043.matrixM.Translate(-m_MinuWidth/2,-m_MinuHeight/6);
045.matrixM.TransformPoints(
pointsM, 3);
046.graph.DrawImage
(m_pImageHMinu,pointsM, 3);
049.Matrix
matrix(1,0,0,1,OxyX,OxyY);
051.matrix.Rotate(SystemTime.wSecond*6-180);
pointsS[] = { Point(0, 0),Point( m_SecWidth,0),Point(0,m_SecHeight )};
053.matrix.Translate(-m_SecWidth/2,-m_SecHeight/7);
055.matrix.TransformPoints(
pointsS, 3);
056.graph.DrawImage
(m_pImageHSec,pointsS, 3);
060.graph.DrawImage(m_pImageNum,0,
0, 14*(SystemTime.wHour/10), 0,14,23,UnitPixel);
062.graph.DrawImage(m_pImageNum,20,0,
14*(SystemTime.wHour%10), 0,14,23,UnitPixel);
064.graph.DrawImage(m_pImageNum,20*2,0,
140, 0,14,23,UnitPixel);
066.graph.DrawImage(m_pImageNum,20*3,
0, 14*(SystemTime.wMinute/10), 0,14,23,UnitPixel);
068.graph.DrawImage(m_pImageNum,20*4,0,
14*(SystemTime.wMinute%10), 0,14,23,UnitPixel);
070.graph.DrawImage(m_pImageNum,20*5,0,
140, 0,14,23,UnitPixel);
072.graph.DrawImage(m_pImageNum,20*6,
0, 14*(SystemTime.wSecond/10), 0,14,23,UnitPixel);
074.graph.DrawImage(m_pImageNum,20*7,0,
14*(SystemTime.wSecond%10), 0,14,23,UnitPixel);
sizeWindow={m_BakWidth,m_BakHeight};
ptSrc={0,0};
078.DWORD dwExStyle=GetWindowLong(m_hWnd,GWL_EXSTYLE);
079.if((dwExStyle&0x80000)!=0x80000)
080.SetWindowLong(m_hWnd,GWL_EXSTYLE,dwExStyle^0x80000);
082.BOOL bRet=FALSE;
UpdateLayeredWindow( m_hWnd,hdcScreen,&ptWinPos,
084.&sizeWindow,m_hdcMemory,&ptSrc,0,&m_Blend,2);
085.graph.ReleaseHDC(m_hdcMemory);
086.::ReleaseDC(m_hWnd,hdcScreen);
087.hdcScreen=NULL;
088.::ReleaseDC(m_hWnd,hdcTemp);
089.hdcTemp=NULL;
090.DeleteObject(hBitMap);
091.DeleteDC(m_hdcMemory);
092.m_hdcMemory=NULL;
093.return bR
095.BOOL CGDIPClockDlg::ImageFromIDResource(UINT nID, LPCTSTR sTR,Image
097.HINSTANCE hInst
= AfxGetResourceHandle();
098.HRSRC hRsrc
= ::FindResource (hInst,MAKEINTRESOURCE(nID),sTR);
099.if (!hRsrc)
100.return FALSE;
102.DWORD len
= SizeofResource(hInst, hRsrc);
lpRsrc = (BYTE*)LoadResource(hInst,
104.if (!lpRsrc)
105.return FALSE;
107.HGLOBAL m_hMem
= GlobalAlloc(GMEM_FIXED, len);
pmem = (BYTE*)GlobalLock(m_hMem);
109.memcpy(pmem,lpRsrc,len);
110.IStream*
111.CreateStreamOnHGlobal(m_hMem,FALSE,&pstm);
113.pImg=Gdiplus::Image::FromStream(pstm);
115.GlobalUnlock(m_hMem);
116.pstm-&Release();
117.FreeResource(lpRsrc);
119.void CGDIPClockDlg::OnLButtonDown(UINT nFlags,
CPoint point)
122.::SystemParametersInfo(SPI_SETDRAGFULLWINDOWS,TRUE,NULL,0);
124.SendMessage(WM_SYSCOMMAND,0xF012,0);
126.CDialog::OnLButtonDown(nFlags,
详细实现过程请参考!
四、结束语
编写该程序的主要动力来自于对GDI+图像、图形功能的好奇,网上好多例子和都是关于C#或delphi等语言的。本人一直以来习惯于使用VC6.0。希望通过此文能增进与大家交流。
&&&&推荐文章:
【上篇】【下篇】这样的png图片怎么做??用什么软件?_百度知道
这样的png图片怎么做??用什么软件?
/zhidao/wh%3D450%2C600/sign=6b024ba537fae6cd0ce1a/bd315c6034a85edfb7508://e./zhidao/wh%3D600%2C800/sign=4ad4cdc4daa1de43719c2/bd315c6034a85edfb7508://e.hiphotos.jpg" esrc="http.hiphotos.baidu.jpg" target="_blank" title="点击查看大图" class="ikqb_img_alink"><img class="ikqb_img" src="/zhidao/pic/item/bd315c6034a85edfb7508://e<a href="http
粘贴到画图板,你剪切图片之后PNG图片.png”就行,另存为“*
其他类似问题
为您推荐:
png图片的相关知识
其他1条回答
我知道PS可以
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁寤鸿浣跨 褰遍锛璐硅蒋浠讹涓绠 瀹规涓褰遍涓扮х昏川杩琛瑰澶杞欢.绠涓瑕浠讳涓涓惧灏卞浠ュ朵轰涓剁褰辩插僵杞妯℃杞锛浠ょх宸撮插僵翠寒涓解杞璐层妯℃杞茬锛插僵璇″板榛芥妯℃澶绫婚借剁锛ㄥ宸瀵规归扮哥瀹ㄤ扮琛ュ瀵规涓瓒崇ㄤ杩琛琛ュ锛ㄣ鸿斤杩娓¤垛扮瀵规杩搴ㄤ杩琛缁杩借ˉ锛ㄤ浠杩搴澶╃┖杩绛浜哄お榛℃浜よ插浜哄扮х锛涓浣锛锯缁惧朵浠ユ澶寮х缁ㄤ寮х涓缃缁瀹堕楂ISO浠ュゆ扮告洪ISO璁剧疆剁х涓绾㈢豢癸骞朵涓褰卞х搴妯℃锛缁浜哄甫ユх绾㈢笺ら璧风绾㈢硷ら㈤ㄧ圭浜哄浜哄(斤浣MMよ薄濠村夸风荤芥帮涓褰卞澶村肩搴褰辨ゼ椋间汉妯′豢ㄥ娴琛褰辨ゼх椋硷澶绉茶楂婧㈠恒存涓涓存浜х涓寮涓EVх杞绘涓轰寮楂瀹藉搴х插版璇浠剁х锛涓寮6瀵哥х涓澶16寮1瀵歌韩浠借х锛涓锛涓虹渚库涓藉钩琛°淇扮х插僵樊锛杩惰插僵锛浠ユ宸ュ井璋锛锛娌℃璋涓хㄧ藉钩琛°鸿芥℃藉钩琛′纭х茶涓ラ藉钩琛¢璇℃瀵逛蹭弗х绾姝f规锛插僵婧㈠轰害杩借ˉ瑜叉х搞妯′豢х锛插僵榛贰锛ф璋榛叉护涔ā浠胯х锛涓绉姣杈棰搴茶茶璐妯℃璐楂瀹藉搴澧哥楂灞娆″ㄧ 娓叉瀵瑰ぉ绌恒绫绘璺ㄥ害杈澶х哥规锛插僵充附锛杩娓¤垛澶瀵瑰澶ч㈢Нㄧ哥杩琛锛捐锛涓涓褰卞搴姝荤规璇瀵规拌喘涔扮扮告猴甯╂ㄦ璇CCD涓娌℃光姝荤逛慨琛ャ瀵CCD涓姝荤圭告猴涓娆¤瀹浠ュ灏卞浠ヤ慨琛ュх涓姝荤癸逛究ㄦ鸿借寸х达浠ょх磋瑙瑙娆h绾㈤ケ琛板瀵CCD瀵圭孩插杈ㄧ宸寮辩硅璁★淇ˉ绾㈣叉孩虹х(濡娌℃绾㈣茬绾㈣)LOMO妯′豢LOMO椋硷ㄩ叉瑙锛茶璋锛逛究ㄢ褰㈡℃瀵瑰箍瑙跨寮璧风褰妗跺舰稿锛浠ヨ交炬℃查躲茬嚎娣峰ㄣ澶璋达浣PS锛楂绾хㄦ峰浠ラ娆测朵璋村妯$广浜害瀵规搴gamma璋淬层层RGB茶璋寸绛朵浣浠绘缉俱辨杞瑁ㄥㄤ璁剧疆涓绯诲ㄤ锛涓宠ㄥ浣归归缉俱归绛锛澶ч插板澶瀛绛惧ㄦ峰璁惧5涓瀛浠ヤ换瀹棰插害剧绛惧ㄧх浠绘缃颁繁璁捐姘村帮PNGPSD绛煎浠讹姘村伴娆测杞绘捐竟妗杞绘惧朵澶绉哥杈规锛濡跺峰借竟寮绛辨疯竟妗渚澶ч卞ㄧ杈规绱锛褰㈢跺锛ㄦ瓒o骞朵涓拌竟妗渚涓杞解 规澶锛ㄦ峰浠ヨ辫村帮浠ヨ寰婊℃ 浠ュㄧх浠绘缃EXIF淇℃瀹(濡ユ蹇ㄧ) 浠ユョNikonCanonDSLR浣跨ㄧ澶达ョD70绛浣跨ㄧ蹇ㄦ扳 娆℃ゆ浣浣 杈虹хEXIF淇℃ や缂杈锛涔浠ョㄥх娴榧椋杞涓杈规涓杈圭杈锛绠ㄢ 骞荤х锛ㄥョ 浠ユョ缂杈PSDGIFJPGPNGPCXTIF绛30澶绉甯歌煎捐薄浠垛 浠ュ揩寮NikonCanonMinoltaFUJISigmaPentaxOlympus绛板绉告哄raw煎浠讹NEFCRW绛锛 х板斤 规瀹哥灏哄帮伴瑙瑙虫寰 缁胯茶蒋浠跺缃锛如何对jpg,png格式的图片做编辑处理?
[问题点数:58分,结帖人guguqiaqia]
如何对jpg,png格式的图片做编辑处理?
[问题点数:58分,结帖人guguqiaqia]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2008年3月 移动平台大版内专家分月排行榜第三
2008年3月 移动平台大版内专家分月排行榜第三
2013年9月 VC/MFC大版内专家分月排行榜第一2013年8月 VC/MFC大版内专家分月排行榜第一
2012年2月 VC/MFC大版内专家分月排行榜第二2011年3月 VC/MFC大版内专家分月排行榜第二2011年2月 VC/MFC大版内专家分月排行榜第二
本帖子已过去太久远了,不再提供回复功能。

我要回帖

更多关于 图片png怎么转换成jpg 的文章

 

随机推荐