2009-04-16 21 views
1

Ich arbeite in Quarz/Core-Grafik. Ich versuche, einen Schwarz-Weiß-Grafikkontext von 1b pro Pixel zu erstellen.Schwarz-Weiß-Grafik Kontext

Ich habe derzeit eine CGImageRef mit einem Graustufenbild (das ist wirklich schwarz und weiß). Ich möchte es in einen schwarz-weißen BitmapContext zeichnen, damit ich die Bitmap herausholen und mit der CCITT-Gruppe 4 komprimieren kann. (Aus irgendeinem Grund lässt Quartz Sie nicht in einem anderen TIFF-Format als LZW speichern).

Also, ich brauche die 1bit pro Pixel Daten. Ich denke, dass das Zeichnen in einen 1bpp Kontext das tun würde. Es lässt mich jedoch nicht den Kontext mit erstellen:

context = CGBitmapContextCreate (data, 
       pixelsWide, 
       pixelsHigh, 
       1, 
       pixelsWide/8, 
       CGColorSpaceCreateDeviceGray(), 
       kCGImageAlphaNone 
           ); 

Gibt es einen Farbraum kleiner als grau?

Antwort

2

Auch wenn 1-Bit-Bitmaps unterstützt wurden, wenn pixelsWide nicht ein Vielfaches von 8 ist, dann ist die Anzahl der Bytes pro Zeile nicht eine ganze Zahl ist: zum Beispiel, wenn das Bild 12 Pixel breit ist, dann ist die Anzahl von Bytes, pro Reihe ist eineinhalb. Ihr Divisionsausdruck schneidet das auf ein Byte pro Zeile ab, was falsch ist.

Aber das ist, wenn 1-Bit-Bitmaps unterstützt wurden, which they aren't.

+0

Nun, in Wirklichkeit mache ich (pixelsWide +7)/8, um dieses Problem zu vermeiden. Ganzzahlarithmetik und alle ... Jedoch scheitern unglückliche Verbindung. Kannst du bearbeiten? –

+0

Ich glaube, Sie wollten auf http://developer.apple.com/documentation/GraphicsImaging/Conceptual/drawingquarz2d/dq_context/dq_context.html#//apple_ref/doc/uid/TP30001066-CH203-BCIBHHBB verweisen –