[Mono-bugs] [Bug 362951] New: GC moves data of Gdk. Pixbuf when creating it with RGB buffer
bugzilla_noreply at novell.com
bugzilla_noreply at novell.com
Tue Feb 19 10:21:53 EST 2008
https://bugzilla.novell.com/show_bug.cgi?id=362951
Summary: GC moves data of Gdk.Pixbuf when creating it with RGB
buffer
Product: gtk#
Version: 2.x
Platform: x86
OS/Version: Windows XP
Status: NEW
Severity: Normal
Priority: P5 - None
Component: gtk-sharp
AssignedTo: mono-bugs at lists.ximian.com
ReportedBy: rothflorian at gmx.de
QAContact: mono-bugs at lists.ximian.com
Found By: Development
I have a byte[] containing the RGB (or RGBA) data of an image. I use this
byte[] with the Gdk.Pixbuf(byte[], bool, int, int, int, int,
PixbufDestroyNotify) ctor to create an instance. This works fine for some time.
But when the GC moves the byte[] the Pixbuf does not recognize this and still
displays the same memory area. So when the Pixbuf is drawn you only see "crap"
or a part of the orginal image that is still in the pointed memory.
Here is my code with which occures this problem:
public static Gdk.Pixbuf ConvertToPixbuf(System.Drawing.Bitmap bmp)
{
Rectangle rect = new Rectangle(0, 0, bmp.Width, bmp.Height);
BitmapData bmpData = bmp.LockBits(rect, ImageLockMode.ReadOnly,
bmp.PixelFormat);
IntPtr ptr = bmpData.Scan0;
//We have an alpha channel?
bool alpha = Bitmap.IsAlphaPixelFormat(bmp.PixelFormat);
int bytesPerPixel = Bitmap.GetPixelFormatSize(bmp.PixelFormat) / 8;
int bytes = bmp.Width * bmp.Height * bytesPerPixel;
byte[] rgbValues = new byte[bytes];
// Copy the RGB values into the array.
System.Runtime.InteropServices.Marshal.Copy(ptr, rgbValues, 0,
bytes);
// Unlock the bits.
bmp.UnlockBits(bmpData);
Gdk.Pixbuf buf = new Gdk.Pixbuf(rgbValues, alpha, 8, bmp.Width,
bmp.Height, bmpData.Stride, null);
return buf;
}
Well, I don't think that the copying of the byte data from the IntPtr causes
the problem, because I also tried copying the resulting byte[] byte per byte
into a new array.
--
Configure bugmail: https://bugzilla.novell.com/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.
You are the assignee for the bug.
More information about the mono-bugs
mailing list