![]() |
|
|
![]()
|
|
| KKNull |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 30.1.2006 Репутация: нет Всего: нет |
Вот есть такой код в Билдере :
Здесь происходит считывание пикселей по строке, используя функцию ScanLine[y] void __fastcall TForm1::ComprBtnClick(TObject *Sender) { Byte *row_0, *row_1; Byte ar[6]; if(pBitmap1 != NULL) delete pBitmap1; pBitmap1 = new Graphics::TBitmap(); pBitmap1->LoadFromFile(OpenPictureDialog1->FileName); FILE *pF = fopen("c:\\compressed.420", "wb+"); int x, y; for(y = 0; y < pBitmap1->Height; y+=2) { row_0 = (Byte *) pBitmap1->ScanLine[y]; row_1 = (Byte *) pBitmap1->ScanLine[y+1]; for(x = 0; x < 3*(pBitmap1->Width); x+=6) { Convert(row_0[x], row_0[x+1], row_0[x+2], ar); ar[3] = GetY(row_0[x+3], row_0[x+4], row_0[x+5]); ar[4] = GetY(row_1[x], row_1[x+1], row_1[x+2]); ar[5] = GetY(row_1[x+3], row_1[x+4], row_1[x+5]); if(fwrite(ar, 1, 6, pF) != 6) { ShowMessage("Output Error!"); } } } fclose(pF); } Есть ли похожая функция для Visual C++ ? может быть GetDIBits ? |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Нет, GetDIBits копирует биты изображения в заданный буфер. Т.е. так, конечно, тоже можно получить доступ к битам, но это несколько накладно, не правда ли...
Посмотри на класс CImage, у него есть ф-я GetPixelAddress - вроде то, что тебе нужно. И вообще, этот класс имеет похожую на твой код функиональность. Но имей ввиду, можно получить доступ к битам только DIB-изображения, но не простого Bitmap. Врочем, когда CImage загружается из файла, он всегда DIB. -------------------- ... |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |