Столкнулся в Builder'е 6 с такой непоняткой. У Canvas'а есть свойство Pixels, который явно описан в Graphics.hpp как массив TColor, но вот чего-то я не пойму. Сам по себе Pixels указателем не является (как хотелось бы), да и фишка вроде &Pixels[0][0] не проходит. Отладил функцию SetPixel, но так и не нашел, куда идет запись (хотя, наверное, плохо искал). Как все-таки узнать адрес этого массива?
К сожалению, не получается. Обращение к Pixels передается на функцию GetPixel, которая принимает 2 параметра (координаты). Вот и выскакивает ошибка - слишком мало параметров...
А там и нет никакого массива В отладчике видно, что Canvas.SetPixel внутренне вызывает Gdi32!SetPixel (HDC hdc, int X, int Y, COLORREF crColor) - никаких массивов там нет, только хэндл.
Andrik Массив можно получить через GetDIBits. Где-то есть тема, в которой подробно обсуждались тонкости данной функции.
Да вот так! Ну, проще не бывает. GetBMpBits proc hBmp:HBITMAP LOCAL DIBInfoIBSECTION ;Узнаем какой BM invoke GetObject,hBmp,sizeof(DIBSECTION),NULL .if eax==sizeof(DIBSECTION) .elseif eax==sizeof(BITMAP) .else invoke MessageBox,NULL,$TA0('Unknown'),$TA0('Unknown'),MB_OK xor eax, eax ret .endif invoke GetObject,hBmp,sizeof(DIBSECTION),ADDR DIBInfo mov eax, DIBInfo.dsBm.bmBits ret GetBMpBits endp Удачи.
S_Alex Этот метод будет работать только если картинка создана через CreateDIBSection, а для обычных картинок нужно юзать GetDIBits. Причём даже если использовать dib-section, память, на которую будет указывать dsBm.bmBits, может быть недоступна для записи.