I'm using MacRuby to work with CoreGraphics and having some trouble with
pointers.
My first attempt was to create the data for a bitmap context using
NSMutableData:
bitmap_data = NSMutableData.alloc.initWithLength(image_data_size)
bitmap_context = CGBitmapContextCreate(
bitmap_data.mutableBytes(),
image_width, image_height,
8, image_width,
gray_color_space, KCGImageAlphaNone)
If I do this, I get an error that "expected instance of Pointer of type 'v',
got 'C' (TypeError)"
I gather from this that CGBitmapContextCreate was expecting a (void *) and got
a (UInt8 *). In C I would just type the difference away, but Ruby doesn't like
ti.
I tried something like:
bitmap_data_ptr = Pointer.new_of_type('v')
bitmap_data_ptr.assign(bitmap_data.mutableBytes())
This didn't work very well either. I get an error that the system can't do a
"sizeof" of an unsized type (presumably void *)
I also tried doing similar using CFDataRef (not much difference really). It
looked like:
bitmap_data = CFDataCreateMutable(nil, image_data_size)
CFDataSetLength(bitmap_data, image_data_size)
bitmap_data_ptr = CFDataGetMutableBytePtr(bitmap_data)
bitmap_context = CGBitmapContextCreate(
CFDataGetMutableBytePtr(bitmap_data),
image_width, image_height,
8, image_width,
gray_color_space, KCGImageAlphaNone)
In this case, I get an error that "expected instance of Pointer, got '""'
(NSMutableString) (TypeError)
Evidently MacRuby sees the return value of CFDataGetMutableBytePtr as being a
string, subsequently typecasts it as such, and goes on.
Is there anything I can do to typecast the pointers to a type that MacRuby will
accept?
Scott
_______________________________________________
MacRuby-devel mailing list
[email protected]
http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel