• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: How to quickly paint to a Cocoa view from a bitmap in memory
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: How to quickly paint to a Cocoa view from a bitmap in memory


  • Subject: Re: How to quickly paint to a Cocoa view from a bitmap in memory
  • From: Lee Ann Rucker <email@hidden>
  • Date: Mon, 26 Sep 2011 13:48:22 -0700

If you named them width and height, you wouldn't have to add notes like that for other people reading your code.

On Sep 26, 2011, at 1:46 PM, koko wrote:

> I alos forgot to say that x and y below are pixels x and pixels y of the bitmap, i.e. its size.
>
> On Sep 26, 2011, at 12:28 PM, koko wrote:
>
>> I too am working in a cross platform environment and use bitmaps in an NSView.  I use the code below and it is fast enough to pan , scroll etc with no sense of sluggishness.
>> My code looks a little different than what you have submitted. You might re-factor to my model.
>>
>>
>> CGColorSpaceRef colorSpace;
>> colorSpace = CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB);
>> provider;
>> CGImageRef bitmap;
>>
>> provider = CGDataProviderCreateWithData (NULL,m_main.m_bitmap.m_array, 4*x*y, NULL);
>> bitmap = CGImageCreate(x, y, 8, 32, 4*x, colorSpace,  kCGImageAlphaNoneSkipFirst|kCGBitmapByteOrder32Host,provider, NULL,true, kCGRenderingIntentDefault);
>>
>> CGRect r;
>> if(bitmap)
>> {
>> NSGraphicsContext *graphicsContext = [NSGraphicsContext currentContext];
>> CGContextRef context = (CGContextRef)[graphicsContext graphicsPort];
>> r = CGRectMake(rect.origin.x, rect.origin.y, rect.size.width, rect.size.height);
>> CGContextDrawImage(context, r, bitmap);
>> }
>>
>> CGColorSpaceRelease(colorSpace);
>> CGDataProviderRelease(provider);
>> CGImageRelease(bitmap);
>>
>> On Sep 24, 2011, at 12:30 PM, Vojtěch Meluzín wrote:
>>
>>> Hi folks,
>>>
>>> I'm implementing a crossplatform (not-only GUI) library, where everything is
>>> drawn internally to an RGBA bitmap and then just copied to screen. On
>>> Windows it works like charm especially since there is a support for
>>> "in-memory" bitmaps. But I don't see such a feature on Mac. I ended up with
>>> this code:
>>>
>>> CGColorSpaceRef colorSpace =
>>> CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB);
>>>      CGContextRef bmpcontext =
>>> CGBitmapContextCreate((void*)desc.Bitmap.GetData(),
>>>                                                      sz.X, sz.Y, 8, sz.X
>>> * 4, colorSpace, kCGImageAlphaNoneSkipLast);
>>>      CGColorSpaceRelease(colorSpace);
>>>
>>>      CGContextSaveGState(context);
>>>      CGRect cliprect = { r.X1, sz.Y - r.Y2, r.GetWidth(), r.GetHeight()
>>> };
>>>      CGContextClipToRect (context, cliprect);
>>>      CGContextSetShouldAntialias (context, false);
>>>
>>>      HIRect bounds;
>>>      bounds.origin.x = 0;
>>>      bounds.origin.y = 0;
>>>      bounds.size.width = sz.X;
>>>      bounds.size.height = sz.Y;
>>>
>>>      CGImageRef temp = CGBitmapContextCreateImage (bmpcontext);
>>>      CGContextDrawImage(context, bounds, temp);
>>>
>>>      CGImageRelease(temp);
>>>      CGContextRelease (bmpcontext);
>>>
>>>      CGContextRestoreGState (context);
>>>
>>>
>>> It basically converts the whole bitmap into CGImageRef and then copies a
>>> part of it into the NSView's context. But it's quite slow. Is there a better
>>> way to do this? And is there a way to create the in-memory images like they
>>> are on Windows?
>>>
>>> One more thing - I do the same thing in Carbon (I just need Cocoa because of
>>> x64...) and I noticed that the coordinates for the CGContext is inverted
>>> vertically, is that correct?? I mean the same context object type, but
>>> different Y handling...
>>>
>>> Thanks in advance.
>>> Vojtech
>>> _______________________________________________
>>>
>>> Cocoa-dev mailing list (email@hidden)
>>>
>>> Please do not post admin requests or moderator comments to the list.
>>> Contact the moderators at cocoa-dev-admins(at)lists.apple.com
>>>
>>> Help/Unsubscribe/Update your Subscription:
>>>
>>> This email sent to email@hidden
>>>
>>
>> _______________________________________________
>>
>> Cocoa-dev mailing list (email@hidden)
>>
>> Please do not post admin requests or moderator comments to the list.
>> Contact the moderators at cocoa-dev-admins(at)lists.apple.com
>>
>> Help/Unsubscribe/Update your Subscription:
>>
>> This email sent to email@hidden
>>
>
> _______________________________________________
>
> Cocoa-dev mailing list (email@hidden)
>
> Please do not post admin requests or moderator comments to the list.
> Contact the moderators at cocoa-dev-admins(at)lists.apple.com
>
> Help/Unsubscribe/Update your Subscription:
>
> This email sent to email@hidden

_______________________________________________

Cocoa-dev mailing list (email@hidden)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:

This email sent to email@hidden

References: 
 >How to quickly paint to a Cocoa view from a bitmap in memory (From: Vojtěch Meluzín <email@hidden>)
 >Re: How to quickly paint to a Cocoa view from a bitmap in memory (From: koko <email@hidden>)
 >Re: How to quickly paint to a Cocoa view from a bitmap in memory (From: koko <email@hidden>)

  • Prev by Date: Re: OT -Dev forums
  • Next by Date: searching for strings containing "
  • Previous by thread: Re: How to quickly paint to a Cocoa view from a bitmap in memory
  • Next by thread: Problems with NSApp runModalForWindow
  • Index(es):
    • Date
    • Thread