Hi Kyle,
thank you for your suggestions, but the clearColor doesn't cast shadow. I
tried the transparency layers too, but when I export the view to a PDF using
dataWithPDFInsideRect, I get no compression (specified in the quartzFilter).
Instead, If I do not use the transparency layers, I properly get the
compression.

pdfData = [printView dataWithPDFInsideRect:printRect];
pdfDoc = [[PDFDocument alloc] initWithData:pdfData];
[pdfDoc writeToFile:outFilePath withOptions:optionsDictWithQuartzFilter];

By ³get the shadow out of the fillPath² I mean that I have a view 100 x 100
pixels, I draw an image 50 x 50 in the center of the view, so the shadow
should be well visible. But since I clip the image rect, the shadow doesn't
appear.


Regards
-- Leonardo


> Da: Kyle Sluder <k...@ksluder.com>
> Data: Thu, 6 Mar 2014 09:54:04 -0800
> A: Leonardo <mac.iphone....@gmail.com>
> Cc: Kevin Meaney <k...@yvs.eu.com>, "cocoa-dev@lists.apple.com"
> <cocoa-dev@lists.apple.com>
> Oggetto: Re: Draw image within a NSBezierPath with no border
> 
> 
>> On Mar 6, 2014, at 9:25 AM, Leonardo <mac.iphone....@gmail.com> wrote:
>> 
>> That's make sense. Do you know any workaround?
>> I have to draw the background color because:
>>    1) the user could choose to see a background color on the area not
>> covered by the image. Let's imagine a circle divided in 3 slices by two
>> vertical lines. In the middle we have the image, and on the left and right
>> areas we see the color. So, at the top and bottom of the image I see that
>> bad blue curved border.
> 
> Create a CGLayer from your destination context that is the size of your image.
> Fill it with your background color. Draw your image into it. Set the clipping
> path on the destination context. Draw the CGLayer into the destination
> context.
> 
>>    2) In case of shadow, if I do not fill with a color before clipping the
>> path I can't get the shadow out of the path. If I do
>> 
>> CGContextSetShadowWithColor...
>> [fillPath addClip];
>> [image drawInRect:fillBounds fromRect:NSZeroRect
>> operation:NSCompositeSourceOver fraction:1.0];
>> 
>> I can't get the shadow out of the fillPath.
> 
> I don¹t know what you mean by ³get the shadow out of the fillPath².
> 
> Do you mean that you don¹t want the shadow to appear below transparent parts
> the your image?
> 
>> Instead If I do:
>> 
>> CGContextSetShadowWithColor...
>>    [aBlueColor set];
>>    [fillPath fill];
>> RemoveShadow
>>    [fillPath addClip];
>>    [image drawInRect:fillBounds fromRect:NSZeroRect
>>    operation:NSCompositeSourceOver fraction:1.0];
>> 
>> The problem is that I must clip the path before drawing the image, and as
>> result the image itself can't project shadow outside the clipped path.
>> I am puzzled.
> 
> If you use my above technique, you should be able to create the shadow and
> then draw the layer on top of it:
> 
> - drawRect: {
>   // Draw the shadow
>   CGContextSaveGState();
>   NSBezierPath *oval = Š;
>   [[NSColor clearColor] setFill];
>   CGContextSetShadowWithColor(Š);
>   [oval fill];
>   CGContextRestoreGState();
> 
>   // Draw the clipped image
>   CGLayerRef layer = MakeLayerFromImage();
>   CGContextSaveGState();
>   [oval addClip];
>   CGLayerDrawAtPoint(layer, Š);
>   CGContextRestoreGState();
> }
> 
> This might not work. I¹m unsure of the behavior of Quartz shadows when drawing
> with +clearColor. If it doesn¹t work, you might want to look into Quartz
> transparency layers (which are not the same thing as CGLayerRefs).
> 
> --Kyle Sluder



_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

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:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to