Я пытаюсь рисовать в контекст растрового изображения, но при этом пуст. Я считаю, что правильно создаю вещи, потому что я могу инициализировать контекст, нарисовать несколько вещей, а затем создать изображение из него и нарисовать это изображение. То, что я не могу сделать, после инициализации, еще раз нарисовать контекст, который рисует больше элементов на нем. Я не уверен, что я пропустил какую-то обычную практику, которая подразумевает, что я могу только нарисовать ее в определенных местах или что я должен сделать что-то еще. Вот что я делаю, ниже.Рисование в контексте растрового изображения
Я скопировал вспомогательную функцию, представленную яблока с одной модификацией, чтобы получить цветовое пространство, потому что не компиляции (это для IPad, не знаю, если это имеет значение):
CGContextRef MyCreateBitmapContext (int pixelsWide, int pixelsHigh)
{
CGContextRef context = NULL;
CGColorSpaceRef colorSpace;
void * bitmapData;
int bitmapByteCount;
int bitmapBytesPerRow;
bitmapBytesPerRow = (pixelsWide * 4);// 1
bitmapByteCount = (bitmapBytesPerRow * pixelsHigh);
colorSpace = CGColorSpaceCreateDeviceRGB(); //CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB);// 2
bitmapData = malloc(bitmapByteCount);// 3
if (bitmapData == NULL)
{
fprintf (stderr, "Memory not allocated!");
return NULL;
}
context = CGBitmapContextCreate (bitmapData,// 4
pixelsWide,
pixelsHigh,
8, // bits per component
bitmapBytesPerRow,
colorSpace,
kCGImageAlphaPremultipliedLast);
if (context== NULL)
{
free (bitmapData);// 5
fprintf (stderr, "Context not created!");
return NULL;
}
CGColorSpaceRelease(colorSpace);// 6
return context;// 7
}
инициализирую это в моем методе инициализации ниже с несколькими образца рисует просто чтобы быть уверенным, что выглядит правильно:
mContext = MyCreateBitmapContext (rect.size.width, rect.size.height);
// sample fills
CGContextSetRGBFillColor (mContext, 1, 0, 0, 1);
CGContextFillRect (mContext, CGRectMake (0, 0, 200, 100));
CGContextSetRGBFillColor (mContext, 0, 0, 1, .5);
CGContextFillRect (mContext, CGRectMake (0, 0, 100, 200));
CGContextSetRGBStrokeColor(mContext, 1.0, 1.0, 1.0, 1.0);
CGContextSetRGBFillColor(mContext, 0.0, 0.0, 1.0, 1.0);
CGContextSetLineWidth(mContext, 5.0);
CGContextAddEllipseInRect(mContext, CGRectMake(0, 0, 60.0, 60.0));
CGContextStrokePath(mContext);
в моем методе DrawRect я создаю образ из него, чтобы сделать это. Может быть, я должен создавать и сохранять это изображение в качестве члена var и обновлять его каждый раз, когда я рисую что-то новое, а не создавая изображение в каждом кадре? (Некоторые советы по этому вопросу было бы неплохо):
// draw bitmap context
CGImageRef myImage = CGBitmapContextCreateImage (mContext);
CGContextDrawImage(context, rect, myImage);
CGImageRelease(myImage);
Тогда как тест я пытаюсь рисовать круг, когда я прикасаюсь, но ничего не происходит, и прикосновение, безусловно, инициирующего:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
CGPoint location;
for (UITouch* touch in touches)
{
location = [touch locationInView: [touch view]];
}
CGContextSetRGBStrokeColor(mContext, 1.0, 1.0, 1.0, 1.0);
CGContextSetRGBFillColor(mContext, 0.0, 0.0, 1.0, 1.0);
CGContextSetLineWidth(mContext, 2.0);
CGContextAddEllipseInRect(mContext, CGRectMake(location.x, location.y, 60.0, 60.0));
CGContextStrokePath(mContext);
}
Помощь?
Вы можете «принять» свой собственный ответ, нажав зеленую галочку ... –