任何给定PNG文件的总体布局如下所示:
文件头:8字节签名.

Chunks:数据块,从图像属性到实际图像本身.
我想用C++读取PNG文件而不使用任何外部库.我想这样做是为了更深入地理解PNG格式和C++编程语言.
我开始使用fstream逐字节读取图像,但我无法通过任何PNG文件的标头.我尝试使用read( char*, int )将字节放入char数组,但read在标头之后的每个字节都失败.
如上所示,我认为我的程序总是被文件结束1A字节所占用.我正在使用Windows 7开发Windows 7和Linux机器.
#include <iostream>
#include <fstream>
#include <cstring>
#include <cstddef>
const char* INPUT_FILENAME = "image.png";
int main()
{
std::ifstream file;
size_t size = 0;
std::cout << "Attempting to open " << INPUT_FILENAME << std::endl;
file.open( INPUT_FILENAME, std::ios::in | std::ios::binary | std::ios::ate );
char* data = 0;
file.seekg( 0, std::ios::end );
size = file.tellg();
std::cout << "File …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Cython来编写我的项目.
我的计划是用C++编写.dll,然后通过Cython从Python调用它们.所以我可以拥有C++的高计算性能,同时保持Python开发的简单性.
随着我走得更远,我有点困惑.据我所知,Cython将python代码包装成C.由于C具有更好的计算性能,因此性能得到了提高.我对此是否正确?
如果我在上面,那么是否有必要在C++中编写.dll并从Python调用它以提高性能?
如果我编写python代码并将其包装到C中,然后从Python调用它,它是否比调用用C++编写的.dll更好?
在交互式解释器中,如果您键入以下内容,您可以看到一些非常有趣的东西:
1) help()
2) modules
3) __builtin__
在阅读输出一段时间后,我遇到了以下几行class bool:
__or__(...)
x.__or__(y) <==> x|y
Run Code Online (Sandbox Code Playgroud)
然后是:
__ror__(...)
x.__ror__(y) <==> y|x
Run Code Online (Sandbox Code Playgroud)
最后一种方法似乎描述了反向或.为什么这种方法存在?什么可能导致__or__(...)返回不同的东西__ror__(...)?
在numpy,我有一系列bools.从图像中检索出数组; 它是二维的,包含1024列和768行.我想通过以太网电缆推送这些数据.有多种方法可以做到这一点,但就我的目的而言,速度非常关键,因此记忆也非常重要.
由于1024 x 768 = 786432每个数组中都有元素(像素),并且每个元素都是True或者False,理论上可以将数组打包成98,304个未压缩字节或96千字节.
786432 bits / 8 bits per byte = 98304 bytes
98304 bytes / 1024 bytes per kilobyte = 96 kilobytes
Run Code Online (Sandbox Code Playgroud)
这需要展平阵列
[ [True, False, True, ..., True]
[False, True, True, ..., True]
...
[True, True, False, ..., False] ]
# flatten the array
[True, False, True, ..., False]
Run Code Online (Sandbox Code Playgroud)
从理论上讲,它可以表示为字节位,因为786,432位均匀地适合98,304字节; 每个数组应该能够由98,304个八位字符表示.
如何bool通过以太网快速发送1024×768 numpy阵列?我正在研究bitstringpython库,但我不确定如何快速将numpy数组管道化为bitstring类.
具体来说,我将这些数组从Raspberry Pi 2发送到常规的Raspberry Pi.
socket …在re模块中的Python中有以下功能:
re.sub(pattern,repl,string,count = 0,flags = 0) - 返回通过替换repl替换字符串中最左边非重叠模式而获得的字符串.如果未找到模式,则返回字符串不变.
我发现它可以像这样工作:
print re.sub('[a-z]*\d+','lion','zebra432') # prints 'lion'
Run Code Online (Sandbox Code Playgroud)
我想知道,是否有一种简单的方法在替换字符串中使用正则表达式,以便替换字符串包含原始正则表达式/原始字符串的一部分?具体来说,我可以做这样的事情(这不起作用)?
print re.sub('[a-z]*\d+', 'lion\d+', 'zebra432')
Run Code Online (Sandbox Code Playgroud)
我想要打印'lion432'.显然,它没有.相反,它打印'lion\d+'.有没有一种简单的方法可以在替换字符串中使用匹配正则表达式的部分?
顺便说一句,这不是一个特例.请不要认为数字总是在最后,单词总是在开头,等等.我想知道一般的所有正则表达式的解决方案.
谢谢