#include <gtk/gtk.h>
#define IMAGE_WIDTH 256
#define IMAGE_HEIGHT 256
guchar rgbbuf[IMAGE_WIDTH * IMAGE_HEIGHT * 3];
gboolean on_darea_expose (GtkWidget *widget,
GdkEventExpose *event,
gpointer user_data);
int
main (int argc, char *argv[])
{
GtkWidget *window, *darea;
gint x, y;
guchar *pos;
gtk_init (&argc, &argv);
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
darea = gtk_drawing_area_new();
gtk_widget_set_size_request (darea, IMAGE_WIDTH, IMAGE_HEIGHT);
gtk_container_add (GTK_CONTAINER (window), darea);
gtk_signal_connect (GTK_OBJECT (darea), "expose-event",
GTK_SIGNAL_FUNC (on_darea_expose), NULL);
gtk_widget_show_all (window);
/* Set up the RGB buffer. */
pos = rgbbuf;
for (y = 0; y < IMAGE_HEIGHT; y++)
{
for (x = 0; x < IMAGE_WIDTH; x++)
{
*pos++ = x - x % 32; /* Red. */
*pos++ = (x/32) * 4 + y - y % 32; /* Green. */
*pos++ = y - y % 32; /* Blue. */
}
}
gtk_main();
return 0;
}
gboolean
on_darea_expose (GtkWidget *widget,
GdkEventExpose *event,
gpointer user_data)
{
gdk_draw_rgb_image (widget->window, widget->style->fg_gc[GTK_STATE_NORMAL],
0, 0, IMAGE_WIDTH, IMAGE_HEIGHT,
GDK_RGB_DITHER_MAX, rgbbuf, IMAGE_WIDTH * 3);
return TRUE;
}
은 그러나 그들은 "gdk_draw_rgb_image
는 사용되지 않으며 새로 작성된 코드에서 사용할 수 없습니다."라고
나는 픽셀을 직접 조작 할 수있는 픽셀 배열로 이미지를 갖고 싶습니다.
기본적으로 필자는 이전에 수정하고 싶었던 픽셀 배열을 "그리기"를 원합니다. 카이로는 좋은 도구이지만 내 목적에는 적합하지 않습니다. 따라서 rectangle
은 선택할 수 없습니다.
더 이상 가능하지 않습니까?
글쎄, 내가 앞에서 언급 한 예는 작품이지만, 나는 더 이상 사용하지 않는 라이브러리를 새로운 코드에 사용하지 않기를 바란다.
그렇다면 어떻게 픽셀을 그릴 수 있습니까? 그리고 이것은 gtk 예제입니다. 우리는 GtkMM을 사용하고 있으며 이에 상응하는 것이 있는지 알고 싶습니다.
많은 감사와 안부
이것은 gtk에서는 잘 작동하지만 cairomm에서는 Pixbuf를 인수로 사용하여'Cairo :: Context'에'set_source_ *'라는 메서드가 없습니다. – Atmocreations
@Atmocreations, cairomm에서 use는'Cairo :: Context :: set_source'와'Cairo :: SurfacePattern'을'Cairo :: ImageSurface'로 싸서 사용할 수 있습니다. – chill
감사합니다! 약간의 헛소리 였지만 효과가있었습니다. – Atmocreations