Сегодня я попытаюсь рассказать о том, как можно повернуть КВАДРАТНУЮ bmpшку 24битного формата во все стороны. Точнее в оставшиеся три стороны. Собсно вот и результат использования функции:exmpl Поворот и BMP
Да, оговорюсь, что картинка не имеет палитры. Так вот, кому надо — читаем дальшеicon mrgreen Поворот и BMP
Сам код собсно я снарядил в функцию, чтобы можно было удобнее использовать. Да, введя минимальные изменения (по коррекции заголовка) вы сможете поварачивать и не квадратные картинки. Функция принимает аргументы: входной файл, выходной файл, номер типа поворота. Всего типов поворота три:

  • 0 тип — против часовой стрелки
  • 1 тип — по часовой стрелки
  • 3 тип — ввех ногами

Много описывать не буду, вот сам код:

void RotateQuadroBMP(char *fIn,char *fOut,unsigned char method = 0)
{
        BITMAPFILEHEADER bfh;
        BITMAPINFOHEADER bih;
        DWORD dwBuffer;
        HANDLE hIn = CreateFileA(fIn,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,NULL,NULL),hOut = CreateFileA(fOut,GENERIC_WRITE,NULL,NULL,CREATE_ALWAYS,NULL,NULL);

        ReadFile(hIn,&bfh,sizeof(BITMAPFILEHEADER),&dwBuffer,NULL);
        ReadFile(hIn,&bih,sizeof(BITMAPINFOHEADER),&dwBuffer,NULL);

        WriteFile(hOut,&bfh,sizeof(BITMAPFILEHEADER),&dwBuffer,NULL);
        WriteFile(hOut,&bih,sizeof(BITMAPINFOHEADER),&dwBuffer,NULL);

        SetFilePointer(hIn,bfh.bfOffBits,NULL,FILE_BEGIN);

        RGBTRIPLE *pixelArray = (RGBTRIPLE *)GlobalAlloc(GMEM_ZEROINIT,bih.biSizeImage);

        ReadFile(hIn,pixelArray,bih.biSizeImage,&dwBuffer,NULL);

        switch(method)
        {
        case 0:

                for(int i = 0;i0;j--)
                        {
                                WriteFile(hOut,&pixelArray[j*bih.biHeight+i],sizeof(RGBTRIPLE),&dwBuffer,NULL);
                        }
                }

                break;
        case 1:

                for(int j = bih.biHeight;j>0;j--)
                {
                        for(int i = 0;i0;i--)
                {
                        for(int j = 0;j
                      

Итак, сначала мы переписываем все хидеры исходного файла, потом копируем картинку к себе в буфер и уже с буфером удобно работаем форами. Ловкость рук. Скажу сразу, алгоритмы вычисления пикселя писал я на смекалку методом научного тыка, так что сильно не пинать. И да работу этой функции подтверждает картинка в посте.

tt twitter big4 Поворот и BMP tt digg big4 Поворот и BMP tt facebook big4 Поворот и BMP tt gmail big4 Поворот и BMP tt myspace big4 Поворот и BMP tt reddit big4 Поворот и BMP

Оставить комментарий

CAPTCHA изображение
Обновить изображение
*

RSS-подписка NIG Twitter-подписка NIG

Метки
Друзья
Блог линуксоида Программы для диагностики компьютера
Супер Pixel
Убивалка флешаБэкконект шелл. Часть вторая.Бэкконект шелл. Начало.НАМ для деления чиселПростая арифметикаПередача файлов. Часть третья. Клиент.Dll injectionСканер портовКодировка текста в BMPРухнул на два дняПередача файлов. Часть вторая. Сервер.Поворот и BMPCRC32 суммаBMP форматфайловые вирусыассемблер, строкиАссемблер и матрицапримеры ассемблерМногопоточное программированиеАрхитектура клиент — серверРаздача ICQПишем шуткупишем паукаПривет от ДжеймсаОбход firewallЗагрузка картинок на Gyazo, прямо из ThunarКейлоггер 3Плюшки в контекстном меню Thunarc по сетиКейлоггер 2КейлоггерСкачать Ассемблер!VirusCheckerОтморозки мешают жить ?! Не проблемма !Cкрипты для взлома аккаунтов QIPWinAPI. Работа с файлами. Часть третья. ЧтениеDlink exploitБрут сайта etxt.ruКрасивая раскладка клавиатуры в GnomeМои безделушки на PerlКак запускать Perl скрипты под WindowsБрутфорс партнёрки ZipCoinПарсер upwap.ruИзменения в блогеЧудо ЗаливалкаСкрипт для загрузки файлов на Zalil.ruЯндекс «чоткий» поисковик!WinAPI. Работа с файлами. Часть вторая. ЗаписьWinAPI. Работа с файлами. Часть первая. ПоискПолучение MD5 хеша средствами C++Что нам стоить letitfile.com забрутить?WarCraft III запуск под LinuxЭнтропия файлаWinsock и C++. Мини прокси. Часть |\\/. Завершающая.Перепилил чекер для 4gameЧекер акаунтов YoupornCMailSend v 1.1. Отправка почы без проблемСлучайные числаWinsock и C++. Часть |||. smtp монстр.Брутфорс LetitFile.comИспользование X-Forwarded-For, для обмана веб-сервера, подмена IP подручными средствамиДело было вечером, делать было нечего…Мысли о аудио сервереПарсер ников из твиттераКонец школоло…Perl+Linux. Заметка первая (Удобный Paste bin).Бэкконект шелл.E-MAIL + winsocket + Cpp. Сложно?winsock и C++. Часть ||. Атака клоунов.C++ резолвинг адресаPerl, анализ HTML кода и определение CMSМатематика в C++winsock и C++