- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我对基本的 libpng 概念缺乏理解,所以请耐心等待。我有以下源代码:
#include <png.h>
#include <stdio.h>
#include <stdint.h>
void cb() { printf("callbacked\n"); }
// write row
void wr_cb (png_structp png_ptr, png_uint_32 row, int pass) {
//printf("wr cb");
}
int main(){
FILE *fp = fopen("pic.png", "wb");
png_structp png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, (png_voidp) cb, cb, cb);
png_infop info_ptr = png_create_info_struct(png_ptr);
png_color* palette = (png_color*) png_malloc(png_ptr, 2*sizeof(png_color));
png_bytep* row_pointers;
png_color_16 bgcolor;
bgcolor.red = 255;
bgcolor.green =255;
bgcolor.blue = 255;
//palette[]
png_color *c1 = &palette[0];
png_color *c2 = &palette[1];
c1->red=255; c1->green=255; c1->blue=255;
c2->red=0; c2->green= 0; c2->blue= 0;
if (setjmp(png_jmpbuf(png_ptr))){
png_destroy_write_struct(&png_ptr, &info_ptr);
fclose(fp);
printf("error: destroyed all\n");
}
png_init_io(png_ptr, fp);
png_set_write_status_fn(png_ptr, wr_cb);
png_set_compression_level(png_ptr, Z_BEST_COMPRESSION);
png_set_IHDR(png_ptr, info_ptr, 500, 500, 1, PNG_COLOR_TYPE_PALETTE, PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT);
png_set_PLTE(png_ptr,info_ptr, palette, 2);
png_write_info(png_ptr, info_ptr);
row_pointers = (png_bytep*) malloc(500*sizeof(png_bytep));
for (size_t l = 0; l < 500; l ++){
row_pointers[l]= (png_byte*) malloc( png_get_rowbytes(png_ptr, info_ptr));
//png_get_rowbytes(png_ptr, info_ptr) -> gives 63
if (l==10)
for (size_t k = 0; k < 70; k++){// NOTE_HERE
row_pointers[l][k] =150; // 255 - draws a line
}
}
png_set_background(png_ptr, c2, PNG_BACKGROUND_GAMMA_SCREEN, 0, 1);
png_write_image(png_ptr, row_pointers);
png_write_end(png_ptr, info_ptr);
png_destroy_write_struct(&png_ptr, &info_ptr);
png_free(png_ptr, palette);
}
我用 gcc thefile.c -lpng -o png_maker 编译它运行 png_maker 会得到以下图像:
我正在使用 PNG_COLOR_TYPE_PALETTE,因为我希望只使用两种颜色 - 我的假设是使用调色板会生成比不使用调色板更小的 png 文件 - 因为在我的用例中,我真的只需要两种像素颜色图片中:黑色或白色/透明 - 这个假设是否正确?
3 个问题:
最佳答案
嗯,我执行此操作的设置代码与您的非常相似。我用png_write_row
一次写图像行,但它应该和png_write_image
差不多。
#include <stdio.h>
#include <stdlib.h>
#include <png.h>
int main(){
png_structp png_ptr = png_create_write_struct (PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
if (!png_ptr) {
exit (EXIT_FAILURE);
}
png_infop info_ptr = png_create_info_struct(png_ptr);
if (!info_ptr) {
png_destroy_write_struct(&png_ptr, NULL);
exit (EXIT_FAILURE);
}
if(setjmp(png_jmpbuf(png_ptr))){
printf ("PNG error\n");
exit(EXIT_FAILURE);
}
FILE * fp = fopen("foo.png", "wb");
if(fp==NULL){
perror("opening output file");
exit (EXIT_FAILURE);
}
png_init_io(png_ptr, fp);
int width=100, height=100;
png_set_IHDR(png_ptr,
info_ptr,
width,
height,
8, // bit_depth,
PNG_COLOR_TYPE_PALETTE,
PNG_INTERLACE_NONE,
PNG_COMPRESSION_TYPE_BASE,
PNG_FILTER_TYPE_BASE);
png_color palette[] = {
{0,0,0}, {100,0,0}
};
png_set_PLTE(png_ptr, info_ptr, palette, 2);
png_byte trans[] = {255, 128}; // entry 0 opaque, entry 1 half alpha
png_set_tRNS(png_ptr, info_ptr, trans, 2, NULL);
png_write_info(png_ptr, info_ptr);
// write the image data, row by row
for (int y=0; y<height; y++) {
png_byte row[width];
for (int x = 0; x < width; x++){
row[x] = ((50-x)*(50-x) + (50-y)*(50-y)) < (50*50); // circle
}
png_write_row(png_ptr, row);
}
png_write_end(png_ptr, NULL);
png_destroy_write_struct(&png_ptr, &info_ptr);
png_free(png_ptr, palette);
return 0;
}
请注意,仅针对我的调试,palette[1]
(非透明条目)设置为红色。听起来您会出于自己的目的将其设置为黑色。
关于c - 如何使用调色板设置 libpng 背景透明度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49798608/
我正在制作一个应用程序,我需要使用 ffmpeg 将两个视频文件叠加在另一个之上。 .我尝试了各种命令,但它所做的只是合并视频。 最佳答案 基本方法是 ffmpeg -i in1 -i in2 -fi
我将 Qt3D 与 offscreen renderer 结合使用并修改框架图以包含背景图像,例如 here . 不幸的是,使用 QPhongAlphaMaterial 为绘制在背景图像上的对象添加透
我正在开发的这个组件有视觉问题。它是带有 2 个 JTextField 和 2 个 JLabel 的 JPanel。我不能做坚实的背景。我尝试了几种不透明/背景颜色组合但没有成功。 我不允许附加图像,
我正在使用 Gnuplot 成功绘制一些时间序列数据。然而,该系列相当密集(大约 5 英寸空间中有 10,000 个样本),当我绘制多个系列时,很难看到绘制在顶部的系列下方。 有什么方法可以使线条具有
我正在尝试设置一个自定义拖动图标以在 NSTableView 中使用。一切似乎都正常,但由于我对 Quartz 缺乏经验,我遇到了问题。 - (NSImage *)dragImageForRowsWi
是否可以制作例如 20% 透明的 TMemo 或其他 vcl 组件?像 TButton 或 TEdit 吗? 在谷歌搜索解决方案时,我发现了这个: From Here ,然后我想,如果我在窗体上绘制图
我目前正在学习如何使用 Scenekit,并且遇到了透明对象的问题。我写了一个着色器来增加正面看脸时的透明度,当我选择白色背景时,一切都按预期工作...... transparency with wh
我对 openGL 中的 alpha 混合有疑问... 我尝试了一些绘制透明对象的方法...通过在绘制透明面之前禁用 GL_DEPTH_TEST 并在绘制透明面后再次重新启用 GL_DEPTH_TES
我正试图让我的背景 webView 像那样透明: webView.setBackgroundColor(0x00000000); 但它不起作用,如果我添加这一行,一切都是透明的(我看不到我的 html
我目前正在创建一个应用程序并且出现了这个问题,我想让 TabLayout 透明。当我使用 RelativeLayout TabLayout 覆盖内容时,当我使用 LinearLayout TabLay
我有一个 UINavigationItem(不是 UINavigationBar),我想使其透明或不透明。这是在我建立从导航 Controller 到我的 UIViewController 子类的关系
是否可以让您的 android Activity 以透明模式在当前正在运行的 Activity 之上运行,以便您可以通过它看到它下面的 Activity ?如果可能,您可以设置不同级别的透明度吗? 最
我正在使用 noUiSlider 范围 slider 。这是 jsfiddle: https://jsfiddle.net/oun5p1xz/ behaviourSlider = document.g
有没有办法改变控制台的不透明度使其半透明? 还有办法将控制台的背景颜色更改为自定义颜色吗? 最佳答案 快速谷歌显示 this site其中包含用于具有透明窗口的控制台应用程序的代码。 本质上,您必须获
主.xml: 这是我的 main.xml,我试图使按钮最透明,但我仍然想看到它们,但我不知道要添加什么以及在哪里添加,请用低不透明度更正我的 xml在按钮
如何将实际内容 Pane 的背景设置为不透明,我添加到其中的面板我已经设置为不透明,但即使我这样做,选项卡 Pane 的主要区域仍显示为蓝色 JTabbedPane tabbedPane = new
是否可以继承颜色但覆盖不透明度值?以下是伪 CSS 中的示例: .color-class { background-color: rgba(255, 0, 0, 0); } .lighten
我正在尝试让我的导航栏变得 100% 透明,以便 UINavigationButtonItems 只可见并且背景(通常为白色)应该显示背景图像。 我试过了 HomeNavigationControll
RGBA 非常有趣,-webkit-gradient、-moz-gradient 和呃... progid:DXImageTransform.Microsoft.gradient 也是如此...是的。
我一直在尝试使用 AppBarLayout,但找不到使它的背景透明的方法。 我的意思是: 这是我的 XML: 如您所见,我使用的是颜色 #8000
我是一名优秀的程序员,十分优秀!