2010-03-12 2 views

ответ

6

Она должна быть такой же:

function TCanvas.GetPixel(X, Y: Integer): TColor; 
begin 
    RequiredState([csHandleValid]); 
    GetPixel := Windows.GetPixel(FHandle, X, Y); 
end; 
4

Если вы ищете что-то, что работает лучше, чем GetPixel/Canvas.Pixel [] вы должны проверить Bitmap.ScanLine. Единственная проблема заключается в том, что данные могут быть организованы несколькими способами, определенными Bitmap.PixelFormat

0

Функция GetPixel очень медленно! Если вам нужна высокая (или даже приемлемая) производительность, вы должны использовать свойство ScanLine. ScanLine [y] - указатель на y-ю строку пикселей в растровом изображении, закодированную в формате, заданном свойством PixelFormat. Например, для 24-битного растрового изображения, линия имеет формат

B1 G1, G2, R1 В2 R2 ... Bn Оп Rn

, если ширина битового массива п. Bi, Gi и Ri - синие, зеленые и красные интенсивности пикселя i, соответственно, в виде байтов.

+0

Могу ли я спросить, что не так с моим аргументом? –

+0

@ Рицаерт: Вы уверены? Я просто создал небольшой BMP-файл, заполненный (R, G, B) = (0xFF, 0, 0) и посмотрел на него в памяти. См. Http://privat.rejbrand.se/hex.png. Выделенный байт является первым байтом первой строки сканирования. Для меня это наверняка выглядит как байты идут BBGGRRBBGGRR ... –

+0

Мне стыдно. Ты прав. Формат для 24-битных растровых изображений находится в порядке BGR. –

Смежные вопросы