如何把png格式的图片编译到程序中,以及提取的方法(急求)

songguozhi 2009-06-26 04:18:00
我的程序中需要使用很多PNG格式的图片,我想把图片随程序一起编译进去,有两个问题:
1.能不能直接编译到主程序中去,具体方法??
2.做成DLL的话,怎么写资源文件,怎么编译,怎么提取?

希望高人指点???????????
...全文
308 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
songguozhi 2009-06-27
  • 打赏
  • 举报
回复
谢谢CCRUN,不过,我需要加上
// 显示在Image中
Image1->Picture->Bitmap->Assign(NULL);
Image1->Picture->Bitmap->Assign(png);
否则的话,以前的图片还在

可能是因为我现在这台电脑上的2009没有升级Update 3,4造成的


我还要提问把TXT文本文件怎么制作成DLL,以及读取的方法,最好是采用Stream的方式?
hnzlk 2009-06-27
  • 打赏
  • 举报
回复
这样做是不是图片还是要存在一个目录下,如果要让别人找不到图片怎么办,就像编译进exe,或者dll中!
hnzlk 2009-06-27
  • 打赏
  • 举报
回复
如果是bcb6呢?
ccrun.com 2009-06-26
  • 打赏
  • 举报
回复
ccrun.com 2009-06-26
  • 打赏
  • 举报
回复
我来了!!!楼主都说了“需要使用很多PNG格式的图片”,把这些PNG图片打包进EXE的资源,显然不太明智。可以专门做一个资源Dll,下面我举个完整的例子:

打开2009,new一个Dynamic-link Library工程,可以不选择“使用VCL”。在dll工程中,再做一个纯文本的.rc文件,内容如下:
[code=BatchFile]CrnPNG1 RCDATA "C:\\ccrun\\123.png"
CrnPNG2 RCDATA "C:\\ccrun\\234.png"
CrnPNG3 RCDATA "C:\\ccrun\\345.png"
CrnPNG4 RCDATA "C:\\ccrun\\456.png"[/code]

注意我示例中的图片放在C:\ccrun目录,你需要更改为自己的图片目录和文件
最后直接编译这个dll工程,会生成一个dll文件,留着后面用。

在2009中new一个VCL Forms Application,然后添加一个Image和一个按钮在窗体,然后在.h文件中添加以下代码:
#include <PngImage.hpp>
// 以下添加到Form类中
private: // User declarations
HANDLE hDll;
TPngImage *png;


在.cpp文件中,Form的构造函数,OnClose事件和Button1的OnClick事件中添加以下代码:

__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
hDll = LoadLibrary(TEXT("dll.dll"));
png = new TPngImage;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
FreeLibrary(hDll);
delete png;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
// 从Dll资源中直接装载PNG图片
png->LoadFromResourceName(int(hDll), String("CrnPNG1")); // CrnPNG2, CrnPNG3....
// 显示在Image中
Image1->Picture->Bitmap->Assign(png);
}
fairchild811 2009-06-26
  • 打赏
  • 举报
回复
在2009,直接在TImage控件的object inspetor的Picture属性内添加,就编译到程序中了
mgsg 2009-06-26
  • 打赏
  • 举报
回复
在BCB6下通过.
资源文件的方法.
lyuan png lyuan.png


void Tfm_main::GetImageRes(Gdiplus::Graphics &g,String pngName)
{

TResourceStream *Res1 = new TResourceStream((int)HInstance,pngName,"png");
HRSRC hRsrc = ::FindResource ((HMODULE )HInstance,pngName.c_str(),"png");
if (!hRsrc)
return ;

//load resource into memory
DWORD len = SizeofResource((HMODULE )HInstance, hRsrc);
BYTE* lpRsrc = (BYTE*)LoadResource((HMODULE )HInstance, hRsrc);
if (!lpRsrc)
return ;

//Allocate global memory on which to create stream
HGLOBAL m_hMem = GlobalAlloc(GMEM_FIXED, len);
BYTE* pmem = (BYTE*)GlobalLock(m_hMem);
memcpy(pmem,lpRsrc,len);
IStream* pstm;
CreateStreamOnHGlobal(m_hMem,FALSE,&pstm);
Gdiplus::Bitmap * Image = Gdiplus::Bitmap::FromStream(pstm); //Gdiplus::Bitmap::FromStream(pstm);

RectF r(0,0,Image->GetWidth() ,Image->GetHeight());
g.DrawImage(Image,r);
//free/release stuff
//GlobalUnlock(m_hMem);
pstm->Release();
GlobalFree(m_hMem);
FreeResource(lpRsrc);

//m_Image->GetWidth(),m_Image->GetHeight()
delete Res1;
delete Image;


}
songguozhi 2009-06-26
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ccrun 的回复:]
先说清楚,你是用CBuilder6还是2009?因为2009已经内置TPNGImage,如果是6的话,就要麻烦一些。
[/Quote]
版本:
2009的
CodeGear™ RAD Studio 2009 Version 12.0.3420.21218 Copyright © 2009 Embarcadero Technologies, Inc. All Rights Reserved.
songguozhi 2009-06-26
  • 打赏
  • 举报
回复
2009的
CodeGear™ RAD Studio 2009 Version 12.0.3420.21218 Copyright © 2009 Embarcadero Technologies, Inc. All Rights Reserved.
lghndyz 2009-06-26
  • 打赏
  • 举报
回复
当然可以把直接编译到主程序中去,图片随程序一起编译进去一般都会导致程序执行缓慢
ccrun.com 2009-06-26
  • 打赏
  • 举报
回复
先说清楚,你是用CBuilder6还是2009?因为2009已经内置TPNGImage,如果是6的话,就要麻烦一些。
《概率论与数理统计》是理工科大学的一门重要基础课程,它结合了概率论的基本理论与统计学的方法,用于分析和处理随机现象。第二版的完整版多媒体教学系统旨在通过丰富的教学资源和互动体验,帮助学生深入理解和掌握这门学科的核心概念。 一、概率论基础 概率论是研究随机事件及其规律性的数学理论,主要包括以下几个关键概念: 1. 随机试验:概率论的研究对象,如掷骰子、抽卡等。 2. 样本空间:所有可能结果的集合。 3. 事件:样本空间的子集,代表某种特定的结果。 4. 概率:事件发生的可能性,通常介于0和1之间,表示为P(A)。 5. 条件概率:在已知某个事件发生的情况下,另一个事件发生的概率。 6. 乘法法则和加法法则:用于计算两个独立或不独立事件的概率。 二、概率分布 1. 离散概率分布:如二项分布、泊松分布、几何分布、超几何分布等,用于描述离散随机变量的分布情况。 2. 连续概率分布:如均匀分布、正态分布、指数分布等,适用于连续随机变量。 三、统计学基础 1. 参数估计:通过样本数据估计总体参数,如均值、方差等。 2. 抽样分布:统计量在多次重复抽样下的分布情况。 3. 点估计和区间估计:给出参数的一个估计值或一个估计范围。 4. 假设检验:检验关于总体参数的假设是否成立,如t检验、卡方检验、F检验等。 5. 回归分析:研究两个或多个变量间的关系,预测一个变量基于其他变量的值。 四、数理统计方法 1. 最大似然估计:寻找使样本数据出现概率最大的参数估计方法。 2. 矩估计:通过总体矩与样本矩的关系来估计参数。 3. 正态分布的心极限定理:大量独立随机变量的和近似服从正态分布,即使这些变量本身非正态。 4. 协方差和相关系数:衡量两个随机变量之间线性关系的强度和方向。 5. 方差分析(ANOVA):比较多个组别间的均值差异。 五、多元统计分析 1. 多元正态分布:多维空间的正态分布,常用于多元线性回归。 2. 判别分析:根据已知分类的样本数据,建立判别函数,对新数据进行分类。 3. 聚类分析:将相似数据分组,揭示数据内在结构。 4. 主成分分析(PCA):降低数据维度,提取主要特征。 六、多媒体教学系统 该教学系统可能包含以下组成部分: 1. 视频讲座:专家讲解理论和例题,直观展示概念。 2. 动画演示:动态模拟随机过程,帮助理解概率模型。 3. 交互式练习:提供习题和答案,实时反馈学习效果。 4. 实验教程:设计数学实验,让学生亲手操作,加深理解。 5. 电子教材:包含文字、图表、案例等丰富内容,便于自主学习。 通过这个多媒体教学系统,学生不仅可以学习到概率论与数理统计的理论知识,还能通过实践应用和互动学习,提升解决实际问题的能力。

604

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder VCL组件使用和开发
社区管理员
  • VCL组件使用和开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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