- 论坛徽章:
- 0
|
一个数据文件中, 每个byte为unsigned char 类型, 用其表示一个像素点...
单个unsigned char 的值, 如果为0xff的话,则此像素点为白色, 如果为0x00的话,则为黑色.
但是我碰到一个问题,画图时颜色恰恰与上面所说的相反..为了测试, 做了个测试的小程序.如下:
/****************************************/
#include <stdio.h>
#include <gtk/gtk.h>
#include <string.h>
static gboolean
on_expose_event(GtkWidget *widget, GdkEventExpose *event, gpointer data)
{
fprintf(stdout, "> %s: in\n", __func__);
cairo_t *cr;
cairo_surface_t *surface;
unsigned char tmp[480 * 620];
memset(tmp, 0xff, 480 * 620); /* 0xff 时, 窗口为黑色, 0x00时, 窗口为白色..这样跟我想的刚好相反啊 */
/* 是不是下面这个函数的问题? */
surface = cairo_image_surface_create_for_data(tmp,
CAIRO_FORMAT_A8, 480, 620, 480);
cr = gdk_cairo_create(widget->window);
cairo_set_source_surface(cr, surface, 0, 20);
cairo_paint(cr);
cairo_destroy(cr);
fprintf(stdout, "< %s: out\n", __func__);
return FALSE;
}
int
main(int argc, char *argv[])
{
GtkWidget *window;
gtk_init(&argc, &argv);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(window), "PDF READER");
gtk_window_set_default_size(GTK_WINDOW(window),
480, 640);
gtk_container_set_border_width(GTK_CONTAINER(window), 0);
gtk_widget_set_app_paintable(window, TRUE);
gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
g_signal_connect(G_OBJECT(window), "destroy",
G_CALLBACK(gtk_main_quit), NULL);
g_signal_connect(G_OBJECT(window), "expose-event",
G_CALLBACK(on_expose_event), NULL);
gtk_widget_show_all(window);
gtk_main();
return 0;
}
因为对图片的这些数据格式不太了解.求各位指点!谢谢 |
|