Nikita_V
|
|
1 | |
Работа с изображениями18.10.2008, 18:25. Просмотров 6553. Ответов 5
Метки нет Все метки)
(
Всем привет. Обшарил много форумов, но того что мне нужно так и не нашел. Интересует вопрос: как работать с изображением? Если точнее, то как редактировать значение цвета конкретного пикселя. Если способ представить изображение в виде массива данных с информацией о цвете и координатах отдельных пикселей?
Заранее благодарю ![]() |
|
18.10.2008, 18:25 | |
Работа с изображениями
Работа с изображениями в классе TImage Простая работа с изображениями, маштабирование |
|
![]() 2250 / 765 / 25
Регистрация: 27.05.2008
Сообщений: 1,496
|
|
18.10.2008, 19:03 | 2 |
смотри формат BMP
0
|
Nikita_V
|
|
18.10.2008, 19:27 | 3 |
Не, ну эт понятно
![]() Задам тогда более конкретные вопросы: 1. "GetPixel(DC: HDC; X, Y: Integer): Longint; Считывает цвет RGB в указанной точке." Не соображу куда считывается цвет :/ 2. Или, например: "При работе с функциями GDI напрямую, наиболее удобным представляется создание объекта bitmap, к пикселям которого можно обращаться напрямую. Делается это с помощью функции CreateDIBSection. Одним из выходных параметров этой функции является указатель на переменную, куда при создании bitmap будет помещен указатель на массив пикселей - ppvBits. Запомнив этот указатель, приложение получает прямой доступ к пикселям изображения. Обычно использующиеся true color изображения с глубиной цвета 24 bit хранят данные попиксельно в виде массива троек `BGR' (каждый пиксель - три байта)." Вроде бы всё понятно, но, опять таки, не соображу где хранится этот "массив троек"? Как его редактировать? В общем перерыл литературы много, а толку мало. Возможно из-за нехватки знаний, так как с моим универом все приходится постигать самому. Простите, если задаю тупые вопросы :/ |
![]() 2250 / 765 / 25
Регистрация: 27.05.2008
Сообщений: 1,496
|
|
18.10.2008, 19:49 | 4 |
1. GetPixel возвращает colorref. Эта структура есть цвет.
2. так или иначе, вы получите указатель на саму битовую карту,которая есть массив длины [width * height * bps],где bps - bytes per pixel. цвет точки с координатами [x,y] расположен в этом массиве, со смещением (x + y*width)*bps С любым универом все приходится постигать самому,не парься.
0
|
Nikita_V
|
|
18.10.2008, 20:17 | 5 |
Ясно. Спасибо! Буду копать дальше...
|
Тематические курсы и обучение профессиям онлайн Профессия Разработчик на C++ (Skillbox) Архитектор ПО (Skillbox) Профессия Тестировщик (Skillbox) |
Nikita_V
|
|
19.10.2008, 16:48 | 6 |
Код
void __fastcall TForm1::Button1Click(TObject *Sender) { HDC hDc = GetDC(Handle); hDCCom = CreateCompatibleDC(hDc); LPTSTR szFileName = "1.bmp"; HBITMAP hBitmap = (HBITMAP)LoadImage( NULL, szFileName, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE ); SelectObject(hDCCom, hBitmap); if (hBitmap) { BitBlt(hDc, 0, 0, 480, 360, hDCCom, 0, 0, SRCCOPY); BITMAPINFO bi; bi.bmiHeader.biSize = sizeof(bi.bmiHeader); bi.bmiHeader.biWidth = 480; bi.bmiHeader.biHeight = 360; bi.bmiHeader.biPlanes = 1; bi.bmiHeader.biBitCount = 24; bi.bmiHeader.biCompression = BI_RGB; bi.bmiHeader.biSizeImage = 480 * 4 * 360; bi.bmiHeader.biClrUsed = 0; bi.bmiHeader.biClrImportant = 0; hBitmap = CreateDIBSection( hDCCom, &bi, DIB_RGB_COLORS, (void**) (&bitPointer), 0, 0); SelectObject(hDCCom, hBitmap); BitBlt(hDc, 480, 360, 480, 360, hDCCom, 0, 0, SRCCOPY); for(int i=0; i<800 * 4; i+=4) { Label1->Caption=Label3->Caption+" "+IntToStr((int)bitPointer[(1+i]); Label2->Caption=Label3->Caption+" "+IntToStr((int)bitPointer[i+1]); Label3->Caption=Label3->Caption+" "+IntToStr((int)bitPointer[i+2]); } } else Label1->Caption="0_0"; } ![]() Насколько я понял bitPointer'ы должны указывать на RGB-значения. Первый BitBlt правильно показывает картинку, а после CreateDIBSection получается черная картинка и все Label соответственно нули показывают. CreateDIBSection, судя по всему, создаёт чистую битмапу. Как мне получить указатель на значения цветов загруженной картинки? :/ |
19.10.2008, 16:48 | |
Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь. Список с изображениями OpenCV с изображениями Вывод текста с изображениями Контейнер с форматированным текстом и изображениями Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |