- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在 Mono gtk# 中创建一个小型绘图程序并使用 Cairo 图形库。我正在 MacOs X 系统上进行编码和编译。我有一个可绘制对象,我在某个时间将其放入 Pixbuf 中,然后稍后将其检索到可绘制对象中!这个想法是在可绘制对象中拍摄图像的“快照”,然后在其上进行绘制。
问题是,当我将 Pixbuf 放回到可绘制对象中时,它看起来很模糊,全是黄色,带有条纹,而且看起来图像的一部分丢失了。
更新:我在我的 Linux 和 Windows 机器上运行了该程序,它运行完美!所以这个错误只出现在 MacOs X 上。代码如下:
// use: gmcs -pkg:gtk-sharp-2.0 -pkg:mono-cairo ttv1.cs
using Gtk;
using Cairo;
using System;
public class Draw : Window
{
DrawingArea canvas;
public Gdk.Pixbuf pixbuf;
public Draw() : base("teikniteink")
{
canvas = new DrawingArea();
canvas.ExposeEvent += canvasExposed;
DeleteEvent += delegate { Application.Quit();};
KeyPressEvent += onKey;
SetDefaultSize(400,400);
SetPosition(WindowPosition.Center);
Add(canvas);
ShowAll();
}
private void onKey(object o, KeyPressEventArgs args)
{
switch (args.Event.Key)
{
case Gdk.Key.w:
Console.WriteLine("Key Pressed {0}", args.Event.Key);
// Send to Pixbuf
pixbuf = Gdk.Pixbuf.FromDrawable(canvas.GdkWindow, Gdk.Colormap.System,0,0,0,0,400,400);
// Save to output.png
pixbuf.Save ("output.png", "png");
break;
case Gdk.Key.e:
Console.WriteLine("Key Pressed {0}", args.Event.Key);
Gdk.GC g = new Gdk.GC(canvas.GdkWindow);
// Retrive from pixbuf
canvas.GdkWindow.DrawPixbuf (g,pixbuf,0,0,0,0,-1,-1,Gdk.RgbDither.Normal,0,0);
break;
}
}
private void canvasExposed(object o, ExposeEventArgs args)
{
using (Cairo.Context ctx = Gdk.CairoHelper.Create(canvas.GdkWindow))
{
PointD start = new PointD(100,100);
PointD end = new PointD(300,300);
double width = Math.Abs(start.X - end.X);
double height = Math.Abs(start.Y - end.Y);
double xcenter = start.X + (end.X - start.X) / 2.0;
double ycenter = start.Y + (end.Y - start.Y) / 2.0;
ctx.Save();
ctx.Translate(xcenter, ycenter);
ctx.Scale(width/2.0, height/2.0);
ctx.Arc(0.0, 0.0, 1.0, 0.0, 2*Math.PI);
ctx.Restore();
ctx.Stroke();
}
}
public static void Main()
{
Application.Init();
new Draw();
Application.Run();
}
}
如果有人知道这里发生了什么并且可以为我指明解决问题的正确方向,我将不胜感激。
最佳答案
我以这种方式触发了同样的问题:
gw = gtk_widget_get_window(GTK_WIDGET(GLOBALS->mainwindow));
if(gw)
{
gdk_drawable_get_size(gw, &w, &h);
cm = gdk_drawable_get_colormap(gw);
if(cm)
{
dest = gdk_pixbuf_new(GDK_COLORSPACE_RGB, FALSE, 8, w, h);
if(dest)
{
dest2 = gdk_pixbuf_get_from_drawable(dest, gw, cm, 0, 0, 0, 0, w, h);
if(dest2)
{
succ = gdk_pixbuf_save (dest2, *GLOBALS->fileselbox_text, "png", &err, NULL);
}
}
}
}
当源可绘制对象是 Quartz 窗口时,gdk_pixbuf_get_from_drawable() 函数存在问题,特别是 _gdk_quartz_image_copy_to_image() 如何为其提供服务。简而言之,转换 256 位垂直 strip ,但转换例程假定像素是 24 位 RGB,而不是 32 位 RGBA。以下补丁解决了我的问题:
--- gtk+/gdk/quartz/gdkimage-quartz.c 2011-12-03 14:24:03.000000000 -0600
+++ gtk+664894/gdk/quartz/gdkimage-quartz.c 2013-10-15 18:52:24.000000000 -0500
@@ -150,6 +150,10 @@ _gdk_quartz_image_copy_to_image (GdkDraw
data = [rep bitmapData];
size = [rep size];
+ int bpr = [rep bytesPerRow];
+ int wid = size.width;
+ int bpx = bpr/wid;
+
for (y = 0; y < size.height; y++)
{
guchar *src = data + y * [rep bytesPerRow];
@@ -158,12 +162,15 @@ _gdk_quartz_image_copy_to_image (GdkDraw
{
gint32 pixel;
+ if (bpx == 4) // fix gdk_pixbuf_get_from_drawable "yellow stripes"
+ pixel = src[0] << 16 | src[1] << 8 | src[2];
+ else
if (image->byte_order == GDK_LSB_FIRST)
pixel = src[0] << 8 | src[1] << 16 |src[2] << 24;
else
pixel = src[0] << 16 | src[1] << 8 |src[2];
- src += 3;
+ src += bpx;
gdk_image_put_pixel (image, dest_x + x, dest_y + y, pixel);
}
我不知道 GTK OSX 源代码的 future 版本中是否已修复此问题。我使用自己的文件来生成 gtkwave 的二进制文件,因为我有一些必要的补丁,这些补丁似乎很久以前从未集成到 jhbuild 源代码树中。
-托尼
关于mono - gtk# Mono 中的 gdk.Pixbuf 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5494000/
Mono 适合开发服务器应用程序,还是只适合开发桌面应用程序?我想用 C# 为 Linux 开发服务器应用程序。我想用 C#/XNA 编写一个第一人称射击 (FPS) 游戏,并且我有一个 Linux
今天我的 Ubuntu 将 Mono 更新到了 4.2.1.102。它不会允许我绝对需要运行的某个程序。如何将其降级到 4.0.5.1?我已经尝试过了... sudo apt-get install
我最近一直在使用 Java 中的 react 器库和 Spring 框架学习响应式(Reactive)编程,并且在很大程度上我已经能够掌握它。然而,我发现自己多次遇到同样的情况,并希望得到一些关于我哪
虽然 Mono 支持对我们来说不是什么大问题,但我认为 OpenRasta 支持它,因为它有一些关于它的提交消息.. 好吧,我尝试在 Mono 上构建它并获得了模棱两可的类型引用(在手动创建了 10
如何使用单声道嵌入调用创建通用 List 对象?我可以得到 List 的 MonoClass: MonoClass* list = mono_class_from_name(mscorlibimage
我正在考虑使用 Mono.Cairo 作为轻量级 CAD 系统的基础。 但不知道表现如何。 CAD 系统产生了很多 重绘并且可以在其中包含大量数据和大量文本。 如果不是开罗,那么欢迎任何其他建议。 我
我花了一周的时间尝试让我的 XSP 服务器处理简单的静态内容:html 页面、js 文件、gif、jpegs 等...没有 ASP.NET。当使用浏览器浏览此页面时,该服务器总是随机崩溃。我的环境是:
我想确定构建和安装当前 Mono 运行时的版本(如何在 Git 中正确调用它?)。 $ dmcs --version Mono C# compiler version 2.9.0.0 但这绝对不够。
关闭。这个问题是off-topic .它目前不接受答案。 想改善这个问题吗? Update the question所以它是 on-topic对于堆栈溢出。 10 年前关闭。 Improve this
我已经在 ubuntu 14.0 lts 中下载并安装了 vscode,并包含了现有的 node.js 项目。首先认为我必须使用 vscode 调试我的应用程序,为此我必须调试(ctrl+shift+
嗨,我刚刚开始学习响应式编程 我这里有这段代码,我的流程应该是我将调用 tokenRepository 来获取 token ,然后使用 token.getAccessToken() 用作 cardRe
几天来,我一直在尝试在 Centos 6.3 上运行的 XSP 2.10 软件包中获取 mono 3.0 和 nginx 1.2.4 和 fastcgi-mono-serverX ...XSP4 服务
我正在尝试使用 Mono 创建一个 Mac 包。当我执行时: mkbundle file.exe --deps -o FILE 我在编译过程中得到了这个: fatal error: "
Mono 2.0 was just officially released .您认为最重要的单一功能是什么? 最佳答案 Windows.Forms 绝对领先...这可能是我最兴奋的功能。 LINQ-t
我正在将我的应用程序更新到 ios6,但我遇到了以下问题 无法通过架构构建应用程序 支持 ARMv6 + ARM v7 但仅支持 ARM v7(错误是 iOS6 与 ARM v6 不兼容)。这意味着我
你好,我有 CentOS,我正在尽我最大的努力更新 Mono,我目前有 1.2.4 版,我试图通过 xbuild 编译一些东西,但我想它不起作用,因为我正在使用旧版本的单声道。 请在将任何指南链接到我
我正在尝试使用以下代码创建包含名称(作为标签)和关闭按钮(作为带有图像的按钮)的新 GTK Notebook 选项卡: Label headerLabel = new Label(); headerL
我正在为需要使用 AppleScript 的 OSX 编写一个单声道应用程序。我正在使用 AppleScript class from the Monodevelop source大多数情况下都可以正
我正在尝试构建一个控制台应用程序来测试 redis/mono 通信。我一直在使用 Monodevelop 4.0 (Xamarin Studios)+Nuget Port 在 mac os 上与 Se
为了摆脱软 float 与硬 float ABI 问题,我尝试在我的 Raspberry Pi 上安装最新版本的单声道 git clone https://github.com/mono/mono.g
我是一名优秀的程序员,十分优秀!