Frage

Ich versuche, CGImage aus NStextfield zu erstellen.
Ich habe einige Erfolge dabei bekommen. Trotzdem kann ich CGImage nicht bekommen, das nur aus Text besteht. Ich möchte sagen, dass ich jedes Mal, wenn ich das Textfeld erfassen kann, die Farbe des Hintergrundfensters zusammen mit ihm erhalte. (Sieht so aus, als würde ich keine Alpha -Kanal -Info bekommen)

Ich habe versucht, Snippet von zu folgen http://www.cocoadev.com/index.pl?convertnsimagetocgimage

 
NSBitmapImageRep * bm = [NSBitmapImageRep alloc];
[theView lockFocus];
[bitmap initWithFocusedViewRect:[theView bounds]];
[theView unlockFocus]

[bma retain];// data provider will release this
int     rowBytes, width, height;

rowBytes = [bm bytesPerRow];
width = [bm pixelsWide];
height = [bm pixelsHigh];

CGDataProviderRef provider = CGDataProviderCreateWithData( bm, [bm bitmapData], rowBytes * height, BitmapReleaseCallback );
CGColorSpaceRef colorspace = CGColorSpaceCreateWithName( kCGColorSpaceGenericRGB );
CGBitmapInfo    bitsInfo = kCGImageAlphaPremultipliedLast;

CGImageRef img = CGImageCreate( width, height, 8, 32, rowBytes, colorspace, bitsInfo, provider, NULL, NO, kCGRenderingIntentDefault );

CGDataProviderRelease( provider );
CGColorSpaceRelease( colorspace );

return img;


Irgendeine Hilfe, um CGImage ohne Hintergrundfarbe zu erhalten?

War es hilfreich?

Lösung

-initWithFocusedViewRect: liest aus dem Fenster -Backing -Store, so dass es im Wesentlichen ein Screenshot dieses Teils des Fensters ist. Deshalb erhalten Sie die Farbe des Fensters in Ihrem Bild.

-[NSView cacheDisplayInRect:toBitmapImageRep:] ist sehr ähnlich, aber es bewirkt, dass die Sicht und seine Unteransicht, aber nicht die Übersichtsanlagen, sich neu zeichnen. Wenn Ihr Textfeld randlos ist, kann dies für Sie ausreichen. (Stellen Sie sicher, dass Sie verwenden -bitmapImageRepForCachingDisplayInRect: So erstellen Sie Ihr NSbitmapimageRep!)

Es gibt eine weitere Option, die als noch korrekter angesehen werden kann als die oben genannten. NStextfield zeichnet seinen Inhalt mit seinem nStextfieldcell. Es gibt nichts wirklich, wenn Sie einfach ein Bild mit der entsprechenden Größe erstellen, sich darauf konzentrieren und dann anrufen -drawInteriorWithFrame:inView:. Das sollte nur den Text zeichnen, genau so, wie er im Textfeld gezeichnet wurde.

Wenn Sie nur Text zeichnen möchten, vergessen Sie nicht NSStringDrawing. NSString hat einige Methoden, die mit Attributen zeichnen (AttributedrawAtPoint:withAttributes:) und nsattributedString hat auch Zeichenmethoden (drawAtPoint:). Sie könnten eines von denen verwenden, anstatt die nStextfieldcell zu bitten, für Sie zu zeichnen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top