Форум программистов, компьютерный форум CyberForum.ru

Objective-C

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.67
everliving
0 / 0 / 0
Регистрация: 26.12.2010
Сообщений: 3
#1

Побитовое считывание bmp-файла - Objective-C

21.02.2012, 18:36. Просмотров 1531. Ответов 3
Метки нет (Все метки)

Здравствуйте! Задача состоит в том чтобы прочесть bmp файл и представить его в виде битовой матрицы дальше работать с матрицей и уже вывести отредактированное изображение обратно так же в формате bmp! Как сделать в c++ я примерно представляю происходит с помощью класса CImage методами Load(...) ! Как реализовать подобное в Objective-C я не знаю, подскажите пожалуйста, если возможно с примера с помощью каких классов можно это реализовать, очень хочется в этом разобраться! Спасибо!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.02.2012, 18:36     Побитовое считывание bmp-файла
Посмотрите здесь:

Считывание bmp C++
Запись и Считывание файла Objective-C
Visual Basic .NET Побитовое чтения файла
Objective-C Сохранение и считывание переменной
Побитовое чтение файла C#
Побитовое считывание числа в длинной арифметике
Считывание и запись .bmp файлов C++
Побитовое чтение файла Java SE

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zulkis
681 / 608 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
21.02.2012, 19:30     Побитовое считывание bmp-файла #2
Если вам нужны именно данные - как вариант:
Objective-C
1
NSData *myImageData = [NSData dataWithContentsOfFile:@"filename"];
Это если я правильно понял... Будет кучка байтов.
everliving
0 / 0 / 0
Регистрация: 26.12.2010
Сообщений: 3
21.02.2012, 20:08  [ТС]     Побитовое считывание bmp-файла #3
Простите а с помощью функции NSImage можно что -то сделать? Насколько я помню из теории нужно получить двухмерный массив где каждый элемент массива будет содержать 3 числа собственно r g b если не путаю!
zulkis
681 / 608 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
22.02.2012, 15:57     Побитовое считывание bmp-файла #4
*UIImage это раз, не NS.

А так - скопируйте данный метод себе, и подсуньте ему на вход имя вашей картинки. Лучше не большую картинку, скажем 3х3 пиксела, иначе в лог дофига вылетит:
Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
-(void)imageDump:(NSString*)file
{
    UIImage* image = [UIImage imageNamed:file];
    CGImageRef cgimage = image.CGImage; // все идет через CGImage
 
    size_t width  = CGImageGetWidth(cgimage);
    size_t height = CGImageGetHeight(cgimage);
 
    size_t bpr = CGImageGetBytesPerRow(cgimage);
    size_t bpp = CGImageGetBitsPerPixel(cgimage);
    size_t bpc = CGImageGetBitsPerComponent(cgimage);
    size_t bytes_per_pixel = bpp / bpc;
 
    CGBitmapInfo info = CGImageGetBitmapInfo(cgimage);
 
    NSLog(
        @"\n"
        "===== %@ =====\n"
        "CGImageGetHeight: %d\n"
        "CGImageGetWidth:  %d\n"
        "CGImageGetColorSpace: %@\n"
        "CGImageGetBitsPerPixel:     %d\n"
        "CGImageGetBitsPerComponent: %d\n"
        "CGImageGetBytesPerRow:      %d\n"
        "CGImageGetBitmapInfo: 0x%.8X\n"
        "  kCGBitmapAlphaInfoMask     = %s\n"
        "  kCGBitmapFloatComponents   = %s\n"
        "  kCGBitmapByteOrderMask     = %s\n"
        "  kCGBitmapByteOrderDefault  = %s\n"
        "  kCGBitmapByteOrder16Little = %s\n"
        "  kCGBitmapByteOrder32Little = %s\n"
        "  kCGBitmapByteOrder16Big    = %s\n"
        "  kCGBitmapByteOrder32Big    = %s\n",
        file,
        (int)width,
        (int)height,
        CGImageGetColorSpace(cgimage),
        (int)bpp,
        (int)bpc,
        (int)bpr,
        (unsigned)info,
        (info & kCGBitmapAlphaInfoMask)     ? "YES" : "NO",
        (info & kCGBitmapFloatComponents)   ? "YES" : "NO",
        (info & kCGBitmapByteOrderMask)     ? "YES" : "NO",
        (info & kCGBitmapByteOrderDefault)  ? "YES" : "NO",
        (info & kCGBitmapByteOrder16Little) ? "YES" : "NO",
        (info & kCGBitmapByteOrder32Little) ? "YES" : "NO",
        (info & kCGBitmapByteOrder16Big)    ? "YES" : "NO",
        (info & kCGBitmapByteOrder32Big)    ? "YES" : "NO"
    );
 
    CGDataProviderRef provider = CGImageGetDataProvider(cgimage);
    NSData* data = (id)CGDataProviderCopyData(provider);
    [data autorelease];
    const uint8_t* bytes = [data bytes];
 
    printf("Pixel Data:\n");
    for(size_t row = 0; row < height; row++)
    {
        for(size_t col = 0; col < width; col++)
        {
            const uint8_t* pixel =
                &bytes[row * bpr + col * bytes_per_pixel];
 
            printf("(");
            for(size_t x = 0; x < bytes_per_pixel; x++)
            {
                printf("%.2X", pixel[x]);
                if( x < bytes_per_pixel - 1 )
                    printf(",");
            }
 
            printf(")");
            if( col < width - 1 )
                printf(", ");
        }
 
        printf("\n");
    }
}
Yandex
Объявления
22.02.2012, 15:57     Побитовое считывание bmp-файла
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru