我目前正在尝试在C++中实现基于libpng的PNG编码器,该编码器使用OpenMP来加速压缩过程.该工具已经能够从各种图像格式生成PNG文件.我将完整的源代码上传到pastebin.com,以便您可以看到我到目前为止所做的工作:http://pastebin.com/8wiFzcgV
到现在为止还挺好!现在,我的问题是找到一种方法如何并行化包含压缩图像数据的IDAT块的生成.通常,libpng函数png_write_row在for循环中调用,其中包含指向结构的指针,该结构包含有关PNG文件的所有信息以及包含单个图像行的像素数据的行指针.
(Pastebin文件中的第114-117行)
//Loop through image
for (i = 0, rp = info_ptr->row_pointers; i < png_ptr->height; i++, rp++) {
png_write_row(png_ptr, *rp);
}
Run Code Online (Sandbox Code Playgroud)
然后,Libpng压缩一行接一行,并用压缩数据填充内部缓冲区.一旦缓冲区已满,压缩数据就会在IDAT块中刷新到映像文件.
我的方法是将图像分成多个部分,让一个线程压缩第1行到第10行,另一个线程压缩11到20,依此类推.但是由于libpng正在使用内部缓冲区,它并不像我想象的那么容易:)我不得不让libpng将压缩数据写入每个线程的单独缓冲区.之后我需要一种方法以正确的顺序连接缓冲区,这样我就可以将它们一起写入输出图像文件.
那么,是否有人知道我如何使用OpenMP和一些调整到libpng?非常感谢你!
我已经设法安装了meld 3.14.2和所有依赖包,通过从源代码编译每个包,并且所有包安装在NFS共享上,--prefix=<base>/meld
用于meld工具&& --prefix=<base>/meld/deps
用于依赖项.
最后,我调用了该工具,我可以看到GUI.但是,当我尝试进行一些功能测试时,它会引发我的错误.我从未使用过该工具.所以,我不知道它应该如何正常工作.但是用户已经指出了以下错误,我猜也可能存在许多其他错误.但以下是其中之一.
$meld
GLib-GIO-Message: Using the 'memory' GSettings backend. Your settings will not be saved or shared with other applications.
II 1
Traceback (most recent call last):
File "/applics/platform/meld/meld-3.14.2/lib/python2.7/site-packages/meld/newdifftab.py", line 117, in on_button_compare_clicked
tab = self.diff_methods[self.diff_type](compare_paths)
File "/applics/platform/meld/meld-3.14.2/lib/python2.7/site-packages/meld/meldwindow.py", line 647, in append_filediff
doc = filediff.FileDiff(len(files))
File "/applics/platform/meld/meld-3.14.2/lib/python2.7/site-packages/meld/filediff.py", line 281, in __init__
from meld.gutterrendererchunk import GutterRendererChunkAction
File "/applics/platform/meld/meld-3.14.2/lib/python2.7/site-packages/meld/gutterrendererchunk.py", line 33, in <module>
class GutterRendererChunkAction(GtkSource.GutterRendererPixbuf):
File "/applics/platform/meld/meld-3.14.2/lib/python2.7/site-packages/meld/gutterrendererchunk.py", line 38, in GutterRendererChunkAction
MODE_REPLACE: load("meld-change-apply-right"),
File "/applics/platform/meld/meld-3.14.2/lib/python2.7/site-packages/meld/gutterrendererchunk.py", line 30, …
Run Code Online (Sandbox Code Playgroud) 我正在开发一个需要两个第三方库(libfoo.so和libbar.so)的C++项目.我的操作系统是Linux.
libfoo.so动态链接到libpng14.so.14(1.4.8)(编辑1)
libbar.so似乎静态链接到libpng libpng 1.2.8 的unknwon版本(编辑1)
我说"似乎是"因为:
ldd libbar.so
png没有显示任何内容nm -D libbar.so | grep png_read_png
说"004f41b0 T png_read_png"less libbar.so | grep png_read_png
说"4577:004f41b0 738 FUNC GLOBAL DEFAULT 10 png_read_png"当我启动我的程序时,它会中止:
terminate called after throwing an instance of 'char const*'
Run Code Online (Sandbox Code Playgroud)
这是gdb回溯:
#0 0xb7ffd424 in __kernel_vsyscall ()
#1 0xb5e776a1 in raise () from /lib/libc.so.6
#2 0xb5e78de2 in abort () from /lib/libc.so.6
#3 0xb60a997f in __gnu_cxx::__verbose_terminate_handler() () from /usr/lib/gcc/i686-pc-linux-gnu/4.4.5/libstdc++.so.6
#4 0xb60a78a5 in …
Run Code Online (Sandbox Code Playgroud) 我一直在使用SOIL来保存图像作为BMP,但事实证明,SOIL(或更具体的stbi)可以节省~5MB图像(大约1366x768分辨率图像或更多),这非常疯狂.
原始BMP保存代码(注意一切都在渲染功能中完成):
uint8_t *pixels = new uint8_t[w * h * 3];
// copy pixels from screen
glBindTexture(GL_TEXTURE_2D, screenTex);
glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, w, h);
glPixelStorei(GL_PACK_ALIGNMENT, 1);
glReadPixels(0, 0, w, h, GL_RGB, GL_UNSIGNED_BYTE, (GLvoid *)pixels);
// invert pixels (stolen from SOILs source code)
for (int j = 0; j * 2 < h; ++j) {
int x = j * w * 3;
int y = (h - 1 - j) * w * 3;
for (int …
Run Code Online (Sandbox Code Playgroud) 我已经多次尝试升级1.3.1之前的Android Studio构建工具,但我总是遇到这个libpng错误.我通过完全删除maven依赖项解决了其中一个错误(因为gradle控制台指向问题文件的确切位置),但现在我遇到了相同的错误,并且没有指向问题文件所在的指针.我错过了什么吗?这是gradle控制台日志:
Executing tasks: [:app:generateDebugSources, :app:generateDebugAndroidTestSources]
Configuration on demand is an incubating feature.
:app:preBuild UP-TO-DATE
:app:preDebugBuild UP-TO-DATE
:app:checkDebugManifest
:app:preReleaseBuild UP-TO-DATE
:app:prepareComAndroidDatabindingAdapters10Rc3Library UP-TO-DATE
:app:prepareComAndroidDatabindingLibrary10Rc3Library UP-TO-DATE
:app:prepareComAndroidSupportAppcompatV72310Library UP-TO-DATE
:app:prepareComAndroidSupportCardviewV72310Library UP-TO-DATE
:app:prepareComAndroidSupportDesign2310Library UP-TO-DATE
:app:prepareComAndroidSupportMediarouterV72220Library UP-TO-DATE
:app:preDebugAndroidTestBuild UP-TO-DATE
:app:prepareComAndroidSupportMultidex101Library UP-TO-DATE
:app:prepareComAndroidSupportPercent2310Library UP-TO-DATE
:app:prepareComAndroidSupportRecyclerviewV72310Library UP-TO-DATE
:app:prepareComAndroidSupportSupportV42310Library UP-TO-DATE
:app:prepareComCrashlyticsSdkAndroidAnswers132Library UP-TO-DATE
:app:prepareComCrashlyticsSdkAndroidBeta113Library UP-TO-DATE
:app:prepareComCrashlyticsSdkAndroidCrashlytics252Library UP-TO-DATE
:app:prepareComCrashlyticsSdkAndroidCrashlyticsCore235Library UP-TO-DATE
:app:prepareComFacebookAndroidFacebookAndroidSdk410Library UP-TO-DATE
:app:prepareComFacebookFrescoDrawee061Library UP-TO-DATE
:app:prepareComFacebookFrescoFbcore061Library UP-TO-DATE
:app:prepareComFacebookFrescoFresco061Library UP-TO-DATE
:app:prepareComFacebookFrescoImagepipeline061Library UP-TO-DATE
:app:prepareComGithubRahatarmanahmedCircularprogressview232Library UP-TO-DATE
:app:prepareComGoogleAndroidExoplayerExoplayerR142Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServices810Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesAds810Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesAnalytics810Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesAppindexing810Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesAppinvite810Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesAppstate810Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesBase810Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesBasement810Library UP-TO-DATE …
Run Code Online (Sandbox Code Playgroud) 我在谷歌播放控制台收到一个关于2个应用程序(由buildbox制作的游戏)的安全警报,警报说我的应用程序使用了一个版本的libpng,这提出了一个安全漏洞,我在我的项目中找不到这个lib,任何解决方案请 ?他们也给了我这个链接https://support.google.com/faqs/answer/7011127
我的目标是读取 PNG 文件,更改像素值并使用libpng存储更新的 PNG 文件。
我按照官方 libpng 手册read_png
编写了两个名为和的函数。示例代码不会更改像素值,因为它是最小的、可重现的示例。它也不检查输入文件是否实际上是 PNG 文件。write_png
#include <png.h>
png_infop info_ptr;
png_bytepp row_pointers;
void read_png(char *file_name)
{
FILE *fp = fopen(file_name, "rb");
png_structp png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
png_infop info_ptr = png_create_info_struct(png_ptr);
png_init_io(png_ptr, fp);
png_read_png(png_ptr, info_ptr, PNG_TRANSFORM_IDENTITY, NULL);
row_pointers = png_get_rows(png_ptr, info_ptr);
png_destroy_read_struct(&png_ptr, &info_ptr, NULL);
fclose(fp);
}
void write_png(char *file_name)
{
FILE *fp = fopen(file_name, "wb");
png_structp png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
png_init_io(png_ptr, fp);
png_set_rows(png_ptr, info_ptr, row_pointers); …
Run Code Online (Sandbox Code Playgroud) 我正在研究MacOSX 10.7.2和Xcode 4.2.1.我libpng
使用端口安装,我试图在我的应用程序中加载PNG图像,但我得到链接器错误:
Undefined symbols for architecture x86_64:
"_png_create_read_struct", referenced from:
loadPngImage(char*, int&, int&, bool&, unsigned char**) in test.o
"_png_create_info_struct", referenced from:
loadPngImage(char*, int&, int&, bool&, unsigned char**) in test.o
"_png_destroy_read_struct", referenced from:
loadPngImage(char*, int&, int&, bool&, unsigned char**) in test.o
"_png_set_longjmp_fn", referenced from:
loadPngImage(char*, int&, int&, bool&, unsigned char**) in test.o
"_png_init_io", referenced from:
loadPngImage(char*, int&, int&, bool&, unsigned char**) in test.o
"_png_set_sig_bytes", referenced from:
loadPngImage(char*, int&, int&, bool&, unsigned char**) in test.o
"_png_read_png", referenced from:
loadPngImage(char*, …
Run Code Online (Sandbox Code Playgroud) 我正在使用GraphicsMagick并且目前遇到以下问题:
执行时
gm identify <filename>.png
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
gm identify: CgBI: unknown critical chunk (<filename>.png)
gm identify: Request did not return an image.
Run Code Online (Sandbox Code Playgroud)
这是从iPhone中提取的png.虽然它可能不包含实际图像,但我确实需要图像信息.
尝试与几位编辑打开它:
使用debug参数提供以下行:
libpng-1.5.14 error: CgBI: unknown critical chunk
Run Code Online (Sandbox Code Playgroud)
我正在运行最新的GraphicsMagick(1.3.18).
有谁知道发生了什么,以及我将如何得到这个以返回图像信息?
提前致谢.
I have an image converter app on google play that runs fine and well, it incorporates NDK for support of more file formats using the DevIL Image Processing library.
It wokrs fine on most devices but since Android 4.4 Kitkat came out, i've received emails and crash reports on Google Play Console especially from Nexus devices that have 4.4 and now other older devices that receive the update
Here is the crash report
java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol "png_set_longjmp_fn" …
Run Code Online (Sandbox Code Playgroud)