Maks150988
Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Frodo_Torbins Нет, мне надо без оберток, работаю на Api. Посмотрел я что народ использует, а использует он GetDIBits или FastDib (это вообще капут для моих знаний на текущий момент). Ну значит я создал битмап через CreateDIBSection, все нормально, теперь мне нужно заменить пиксели в полученной карте пикселей. Сделал так: Код: var bmi : TBitmapInfo; bits: Array [0..MAX_WIDTH, 0..MAX_WIDTH] of TRGBTriple; bi : Bitmap; // ZeroMemory(@bmi, Sizeof(TBitmapInfoHeader)); with bmi do begin bmiHeader.biSize := SizeOf(TBitmapInfoHeader); bmiHeader.biWidth := MAX_WIDTH; bmiHeader.biHeight := MAX_HEIGTH; bmiHeader.biPlanes := 1; bmiHeader.biBitCount := 24; bmiHeader.biCompression := BI_RGB; end; GetDIBits(pcp.hdcMem, pcp.hbmMem, 0, MAX_WIDTH, @bits, bmi, DIB_RGB_COLORS); bits[10, 0].rgbtBlue := 0; bits[10, 0].rgbtGreen := 0; bits[10, 0].rgbtRed := 0; SetDIBits(pcp.hdcMem, pcp.hbmMem, 0, MAX_WIDTH, @bits, bmi, DIB_RGB_COLORS); | Ну точка появляется на HDC, вроде уже правильно что-то делаю, но появляется она с перепутанными координатами x-y чтоли. Высота у контрола 29, а ширина 89. Так вот если сделать bits[29, 0] - точка чуть ли не посередине контрола рисуется. Я конечно понимаю что тут нечисто дело, тем более данные о пикселах вроде задом наперед распологаются (или зеркально, ведь в некоторых примерах высоту указывают с минусом в структуре TBitmapInfo) и еще все зависит вроде бы от битности, но для меня пока такое трудновато. Так вот я бы хотел прояснить, может быть я сам массив неправильно задал в переменной или действительно надо вести пересчет координат? |