`
xumingrencai
  • 浏览: 1210701 次
文章分类
社区版块
存档分类
最新评论

将资源文件转换为头文件嵌入到工程

 
阅读更多

/** png 图片的数据以字节数组的方式存入头文件,将头文件持久化到磁盘系统中~ */

-(void) savePngBytesAsHeaderFile:(NSString*)pngName columns:(int)columns {

// 唯有这种方式取得的 NSData 对象的 length 属性不再为0,有效!!

NSString *filePath = [[NSBundle mainBundle] pathForResource:pngName ofType:@"png"];

NSData *imageData = [[NSData alloc] initWithContentsOfFile:filePath];

Byte *bytes = (Byte*)[imageData bytes];

NSUInteger length = [imageData length];

NSMutableString *hexStr = [NSMutableStringstring];

NSString *nameModified = [NSString stringWithString:pngName];

// 将图片名称中的 '-' 替换成 '_' ~

nameModified = [nameModifiedstringByReplacingOccurrencesOfString:@"-"withString:@"_"];

[hexStrappendFormat:@"#ifndef MacEncryptTool_%@_PNG_H\n", [nameModifieduppercaseString]];

[hexStrappendFormat:@"#define MacEncryptTool_%@_PNG_H\n\n", [nameModifieduppercaseString]];

[hexStrappendFormat:@"unsigned char %@_png[] = {\n\t", nameModified];

NSString *splitStr = [NSString stringWithString:@", "];

for(int i = 0; i < length; ++ i) {

NSString *itemStr = [NSString stringWithFormat:@"%x", bytes[i]&0xff];// 16进制数

if([itemStr length] == 1) { // 补一位 0 ~

itemStr = [NSStringstringWithFormat:@"0x0%@", itemStr];

} else {

itemStr = [NSStringstringWithFormat:@"0x%@", itemStr];

}

if(i != length-1) {

[hexStr appendFormat:@"%@%@", itemStr, splitStr];

if((i+1)%columns == 0) {

[hexStrappendString:@"\n\t"]; // 换行~

}

} else {

[hexStr appendFormat:@"%@\n", itemStr];

}

}

[hexStrappendFormat:@"};\nunsigned int %@_png_len = %u;\n", nameModified, length];

[hexStr appendString:@"\n#endif"];

NSString *fileName = [NSString stringWithFormat:@"%@.png.h", nameModified];

[hexStrwriteToFile:fileName atomically:NOencoding:NSUTF8StringEncodingerror:nil];

// NSData *fileData = [hexStr dataUsingEncoding:NSUTF8StringEncoding];

// [fileData writeToFile:fileName atomically:NO];

}

分享到:
评论

相关推荐

    bin文件转换为C文件转换工具

    "bin文件转换为C文件转换工具"是针对这两种类型文件进行转换的工具,它允许开发者将二进制数据嵌入到C程序中,以便于存储、传输或执行特定操作。 在开发过程中,有时我们需要将二进制文件(如固件更新、配置数据或...

    将文件转换为十六进制.zip

    在IT领域,将文件转换为十六进制是一种常见的操作,特别是在软件开发、数据处理和逆向工程中。这个“将文件转换为十六进制.zip”压缩包包含了一个名为"ToHex"的程序,它能实现这一功能。这个程序的目的是将任意文件...

    把资源编译进EXE之(二)打造定制的资源编译器 工程包

    在上一篇文章中,我们可能已经深入研究了Qt的Rcc工具的工作原理,了解了它是如何将资源文件转换为C++源代码,然后这些源代码在编译时被整合到应用程序中。现在,我们将利用这些知识来创建一个名为"SimpleRcc"的简化...

    把图标打包成dll文件

    要将ICO文件转换为DLL,我们需要进行以下步骤: 1. **创建资源脚本**:DLL文件中的资源,如图标,需要通过资源脚本来定义。你可以使用Visual Studio这样的IDE,或者独立的工具如Resource Hacker或RCEdit来创建或...

    visual c++用代码 提取EXE或DLL中的图标ico

    在编译时,这个脚本会被转换为二进制资源文件,然后嵌入到最终的EXE或DLL中。在我们的例子中,"提取EXE或DLL中的图标.rc"就是这样一个资源脚本,它可能包含了提取图标的定义。 要从EXE或DLL中提取图标,我们主要...

    获取dll,exe 中的资源图片源代码

    在编程领域,有时我们需要直接从`.dll`或`.exe`文件中提取资源,例如图片、图标等。...通过理解Windows API以及提供的源代码,开发者可以学习如何与二进制资源交互,这对于开发需要处理资源文件的应用程序非常有帮助。

    MFC中嵌入OGRE

    在MFC中,我们通常会创建一个基于对话框的应用程序,然后将其转换为单文档界面(SDI)。SDI允许用户查看和编辑单个文档,这通常是通过CView类的子类实现的。在我们的案例中,我们将创建一个新的CView派生类,该类将...

    在EXE文件里保存一些特定的信息

    例如,可以将字符串资源内联到代码中,减少资源文件的使用。 6. **自我修改**:虽然不常见,但有些程序可能会有自我修改的能力,即在运行时改变自己的内容。这通常涉及到复杂的操作,如重新定位代码、更新PE头信息...

    visual c++ vc加载显示.PNG图片.zip

    在这个项目中,`png.cpp`可能包含了调用libpng API来读取PNG数据流,并将图像数据转换为可以在Windows GDI(Graphics Device Interface)中显示的位图。 5. **Windows GDI**:GDI是Windows操作系统的一部分,提供了...

    VC文件后缀

    在Visual C++(以下简称VC)开发环境中,当资源文件转换为二进制格式后,会被保存在APS文件中。这种格式的主要目的是为了加速资源加载速度。 - **特点**: - 作为中间文件存在,主要用于提高效率。 - 不直接参与...

    shuzishuiyin.zip_shuzishuiyin_site:www.pudn.com_数字水印嵌入

    4. DCTSZSY.uir:用户界面资源文件,定义了程序的图形用户界面,可能包括输入图像、显示结果等控件。 在嵌入水印的过程中,一般会先对图像进行DCT变换,然后在变换系数中选择合适的部分(通常是高频区域)插入水印...

    VB项目的暗箱VB项目改写

    - **资源文件**:VB项目中的资源(如位图、图标等)通常是嵌入到可执行文件中的。在VC中,这些资源可以放在单独的.res文件中,方便管理和更新。 - **动态链接库(DLL)**:为了扩展功能,可以将部分代码封装到DLL...

    手动构建APP Makefile文件和entitlements.plist

    构建APP时,需要将entitlements.plist与Xcode项目或Makefile正确关联,确保在打包过程中被正确地嵌入到最终的IPA文件中。使用`codesign`命令进行代码签名时,需指定entitlements文件: ```bash codesign -s "Your ...

    在vs2008中嵌入matlab

    MATLAB Compiler可以将MATLAB代码转换为可独立运行的组件,例如DLL或独立的可执行文件,这样就可以在非MATLAB环境中调用。在VS2008中,我们将创建一个项目,并链接到由MATLAB Compiler生成的组件。 1. **配置VS2008...

    LIB提取器.RAR

    工具可以帮助开发者从LIB文件中提取出源代码、头文件或其他资源,这对于逆向工程、学习库的内部实现或在没有源代码的情况下修复问题很有帮助。 4. **依赖分析** 它可能能识别库文件依赖的其他库或模块,这对于...

    vtk Qt结合的文件

    【标题】:“vtk Qt结合的文件”涉及到的技术领域是计算机图形学和软件开发,特别是将Visualization Toolkit (vtk)与Qt框架进行集成的应用。在这一领域,开发者常常需要处理图形用户界面(GUI)与3D可视化之间的交互...

    vc_sample.rar_VC sample

    1. 工程配置:VC++工程可以包含多个源文件和资源文件,每个工程可以有多种配置(如Debug、Release),每种配置可以独立设置编译选项。 2. 依赖关系:理解项目的依赖关系对于构建和调试至关重要,包括头文件、库文件...

    QRCode.rar

    我们先要将qrcodegen的头文件和源文件添加到QT工程,然后调用`qrcodegen::QrCode::encodeText()`生成二维码数据,再将其转换为像素矩阵,最后利用QImage和QPainter进行绘制。 在"QRCode.rar"这个压缩包中,可能包含...

    simulink相关教程及例子资源合集(包括VC调用simulink代码)

    通过这些资源的学习,你不仅可以掌握Simulink的基本建模和仿真技能,还能了解如何在实际工程中将Simulink模型嵌入到VC程序中,提升系统设计的效率和灵活性。对于希望在控制工程、信号处理等领域工作的人来说,这是一...

    LuaPlus 5.1 vs2010工程代码

    Lua是一种轻量级的、解释型的、面向过程的脚本语言,设计目标是易于嵌入到其他应用中。LuaPlus是Lua的一个扩展,它提供了更高级别的API,使得与C++的交互更为简单和高效。例如,LuaPlus提供了自动垃圾回收机制,使得...

Global site tag (gtag.js) - Google Analytics