Odpowiedz na ten temat
Pokaż wyniki od 1 do 3 z 3
  1. Avatar tmkszlc
    Dołączył
    Sep 2008
    SkÄ…d
    Koszalin
    Postów
    947

    Cytuj | #1

    Witam, od kilku godzin próbuję znaleźć rozwiązanie mojego problemu. Mianowicie chodzi o to, że na zaliczenie muszę napisać aplikację graficzną, która pozwoli na zmianę kontrastu, jasności, skala szarości itp.

    Niestety kompletnie nie wiem jak zabrać się za wczytanie obrazu do tablicy, ale w taki sposób, aby obraz był wczytany na dwuwymiarową tablicę piksel po pikselu, abym mógł wykonywać na nich jakieś działania. (Obj-C / iOS)

    Jeśli ktoś ma jakaś koncepcję jak się za to zabrać i chciałby pomóc to będę bardzo wdzięczny.
    Ostatnio edytowane przez tmkszlc ; 12.11.2011 o 03:08
    Komputer: MacBook Pro 17 2010 i7 Matt
    Telefon: iPhone 3G 16GB
    Odtwarzacz: iPhone 3G 16GB
    Tablet: The new iPad 32GB WiFi + 4G
    



  2. Dołączył
    Aug 2011
    Postów
    51

    Cytuj | #2

    Tu masz fragment programu który ostatnio pisałem. Ciebie z tego powinno interesować to pogrubiłem. To działa na bmp
    Kod:
    	NSBitmapImageRep* bitmap = [NSBitmapImageRep imageRepWithContentsOfFile:bitmapFile];
    
    	NSMutableArray* lines = [NSMutableArray arrayWithCapacity:128];
    	short lineBegin;
    	Line* line;
    	BOOL similarLineExists;
    	unsigned int lineColor;
    	unsigned int pixelColor;
    	
    	unsigned char* bitmapData = [bitmap bitmapData];
    	unsigned short r, g, b;
    	unsigned short bitsPerPixel = [bitmap bitsPerPixel];
    	unsigned short jump = bitsPerPixel / (sizeof(unsigned char) * 8);
    	for (unsigned int y = 0; y < bitmap.pixelsHigh; y++) {
    		lineBegin = -1;
    		lineColor = 0;
    		for (unsigned int x = 0; x < bitmap.pixelsWide; x++) {
    			r = bitmapData[0];
    			g = bitmapData[1];
    			b = bitmapData[2];
    			pixelColor = r * 1000000 + g * 1000 + b;
    			if (lineBegin != -1 && (lineColor != pixelColor || x == bitmap.pixelsWide)) {
    				line = [Line lineWithX:lineBegin y:y width:x - lineBegin color:lineColor];
    				
    				similarLineExists = NO;
    				for (short i = lines.count - 1; i > -1; i--) {
    					if ([line isLikeLine:[lines objectAtIndex:i]]) {
    						((Line*)[lines objectAtIndex:i]).height++;
    						similarLineExists = YES;
    						break;
    					}
    				}
    				if (!similarLineExists) {
    					[lines addObject:line];
    				}
    				
    				lineColor = 0;
    				lineBegin = -1;
    			}
    			if (r + g + b != 0 && lineBegin == -1) {
    				lineBegin = x;
    				lineColor = pixelColor;
    			}
    			bitmapData += jump;
    		}
    	}
    Ostatnio edytowane przez wojtkow ; 12.11.2011 o 11:25
    Komputer: Macbook Air MC966PL/A/P1

  3. Avatar tmkszlc
    Dołączył
    Sep 2008
    SkÄ…d
    Koszalin
    Postów
    947

    Cytuj | #3

    Dziękuję za pomoc, przydało się. Nurtuje mnie jeszcze jedna rzecz. Piszę aplikację opartą na TabBarControllerze i chciałbym, żeby po wczytaniu obrazka na jednym ekranie, ten sam zostal wyswietlony na drugim i kolejnych. kazda zakladka jest oparta na innej klasie. nie wiem jak to ze soba pogodzic.

    [v1] [v2] [v3]

    v1 - tu wczytuje sobie obrazek, - viewController.h i .m
    v2 - mozliwosc korekty jasnosci/kontrastu itp - ColorCorrectionViewController
    v3 - konwersja do B&W - GrayScaleViewController.

    wczytuje - UIImage *workingImage. (aktualnie wczytuje na kazdym skrinie przez co nie przenosza mi sie zmiany z poprzednich ekranow)

    z gory dziekuje za pomoc.
    Komputer: MacBook Pro 17 2010 i7 Matt
    Telefon: iPhone 3G 16GB
    Odtwarzacz: iPhone 3G 16GB
    Tablet: The new iPad 32GB WiFi + 4G
    

Odpowiedz na ten temat