Pergunta

Gostaria de saber se alguém pode me apontar na direção certa sobre quais estruturas/métodos usar ao substituir um bloco de pixels em uma imagem por outro bloco de pixels.

Por exemplo, digamos que eu tenho uma imagem simples totalmente vermelha e considero meu tamanho de bloco de pixel como 5x5 pixels. Agora, a cada 3 blocos, quero substituir o terceiro bloco por um bloco de cor azul (5x5 pixels), para que isso resultaria em uma imagem vermelha com blocos azuis aparecendo a cada 3 blocos vermelhos.

Encontrei informações sobre a substituição de pixels, mas estou tentando descobrir como determinar e processar blocos de pixels. Qualquer conselho seria apreciado .. e qualquer código seria um sonho molhado.

Foi útil?

Solução

Embora possa parecer uma pergunta simples, não é muito fácil fazer algo assim. Você precisa de muitas informações básicas para que tudo aconteça. Também depende de onde a imagem vem e do que você deseja fazer com ela.

Não vou fornecer um exemplo de funcionamento, mas aqui estão algumas dicas:

Lendo em uma imagem:

UIImage *img = [UIImage imageNamed:@"myimage.png"];
// make sure you added myimage.png to your project

Criando seu próprio "contexto gráfico" para se basear:

UIGraphicsBeginImageContext(CGSizeMake(480.0f, 320.0f)); // the size (width,height)
CGContextRef ctx = UIGraphicsGetCurrentContext();

Pintando sua imagem em seu contexto (atual):

[img drawAtPoint:CGPointMake(0.0f, -480.0f)]; // (draws on current context)

Fazendo alguma outra pintura:

CGContextBeginPath(ctx); // start a path
CGContextSetRGBStrokeColor(ctx,1,0,0,1); // red,green,blue,alpha with range 0-1
CGContextMoveToPoint(ctx,50,0); // move to beginning of path at point (50,0)
CGContextAddLineToPoint(ctx,100,100); // add a line to point (100,100)
CGContextStrokePath(ctx); // do the drawing

Transformando o contexto do bitmap em uma imagem novamente:

UIImage *resultImage = UIGraphicsGetImageFromCurrentImageContext();

E então, também:

Mostre a imagem para o público, de dentro de um controlador de exibição:

[self.view addSubview:[[[UIImageView alloc] initWithImage:resultImage] autorelease]];

Ou escreva a imagem como JPEG:

NSData *imagedata = UIImageJPEGRepresentation(img,0.8); // 0.8 = quality
[imagedata writeToFile:filename atomically:NO];

Ou como PNG:

NSData *imagedata = UIImagePNGRepresentation(img);
[imagedata writeToFile:filename atomically:NO];

Para os últimos, você precisaria ter um nome de arquivo, o que também não é tão trivial (dado o ambiente telefônico em que você mora). Esse é outro tópico sobre o qual você encontrará muito, procure coisas como:

NSArray *path = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *filename = [[path elementAtIndex:0] stringByAppendingPathComponent:@"myimage.png"];

Este é o esboço geral, eu posso ter cometido alguns erros, mas isso deve fazer você ir pelo menos.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top