![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Где искать буфер TBitmap [D7]
imm © (2005-05-31 10:41:00)Люди добрые помогите, где мне отыскать адрес буфера (ну где хрянятся все пиксели в виде dw), мне просто нужен быстрый доступ к этим самым пикселям и я хочу писать алгоритм обработки на asm, но я не знаю как и где этот буфер храниться... Помогите... Зараннее спасибо.
WondeRu (2005-05-31 12:27:00) [1]WondeRu © (31.05.05 12:24) [8]
LittleBMP == BMP (просто не стер Little;) )
WondeRu (2005-05-31 12:24:00) [2]параметры функций смотри в хелпе
var
Data : array[0..n] of Byte;
BMP : TBitmap;
BMInfo : TBitmapInfo;
Size : DWORD;
FillChar (BMInfo, SizeOf(BMInfo), 0); //обнуляем
BMinfo.bmiHeader.biSize := sizeof(TBitmapInfoHeader); //высталяем размер
GetDIBits (LittleBMP.Canvas.Handle, LittleBMP.Handle, 0, LittleBMP.Height, nil, BMInfo, DIB_RGB_COLORS);//получаем BMInfo
//записываем в массив Data
GetDIBits(BMP.Canvas.Handle,
BMP.Handle,
0,
BMP.Height,
@Data[0],
BMInfo,
DIB_RGB_COLORS);
Immortal (2005-05-31 12:03:00) [3]Извените за назойливость, но ScanLine работает только если BitMap перед вызовом загружен из файла (чего мне не надо), а GetDIBits это нечто злое (с Win API дружу пока плохо), я бы был благодарен, если бы мне дали примерчик всё таки с GetDIBits или хотя бы с GetDIB, а у меня что-то не получается...
Immortal (2005-05-31 12:02:00) [4]Извените за назойливость, но ScanLine работает только если BitMap перед вызовом загружен из файла (чего мне не надо), а GetDIBits это нечто злое (с Win API дружу пока плохо), я бы был благодарен, если бы мне дали примерчик всё таки с GetDIBits или хотя бы с GetDIB, а у меня что-то не получается...
TUser (2005-05-31 10:56:00) [5]> Immortal © (31.05.05 10:48) [3]
Ну, если на то пошло, то любой двухмерный массив расположен в одну строку. В данном же случае, TBitMap хранит ссылку hBitMap на объект создаваемый и обслуживаемый операционной системой. Судя по тому, что написали программисты Борланда система действительно хранит двухмерный массив точек
Integer(Result) := Integer(bmBits) +
Row * BytesPerScanline(biWidth, biBitCount, 32);
Да и как иначе-то собственно?
WondeRu (2005-05-31 10:56:00) [6]Immortal © (31.05.05 10:48) [3]
да... читай Help
Immortal (2005-05-31 10:48:00) [7]А он там в виде обычного двумерного массива разложенного в одну строку ???
WondeRu (2005-05-31 10:46:00) [8]GetDIBits
Alx2 (2005-05-31 10:43:00) [9]У TBitMap в св-ве ScanLine