Модератор: Модераторы
function FastBitmapToBitmap(FastBitmap: TFastBitmap; Bitmap: TBitmap);
var
X, Y: Integer;
PixelPtr: PInteger;
PixelRowPtr: PInteger;
P: TPixelFormat;
RawImage: TRawImage;
BytePerPixel: Integer;
begin
try
Bitmap.BeginUpdate(False);
RawImage := Bitmap.RawImage;
PixelRowPtr := PInteger(RawImage.Data);
BytePerPixel := RawImage.Description.BitsPerPixel div 8;
for Y := 0 to Size.Y - 1 do begin
PixelPtr := PixelRowPtr;
for X := 0 to Size.X - 1 do begin
PixelPtr^ := Pixels[X, Y] * $010101;
Inc(PByte(PixelPtr), BytePerPixel);
end;
Inc(PByte(PixelRowPtr), RawImage.Description.BytesPerLine);
end;
finally
Bitmap.EndUpdate(False);
end;
end;
Alex2013 писал(а):Но можно заставить нарисовать, что-то на картинке или например форме (причем во втором случае никакой памяти на уровне программы выделятся не будет ) А вот что происходит дальше зависит от механизмов GUI ,GDI и т.д. и т.п .
zub писал(а):Упс ... вопрос читал ? понял про что в приведеном куске ?
zub писал(а):Дело в современных ос и безопасности. Давно уже нет прямого доступа к видеопамяти (как и комногим другим сушьностям),
Лекс Айрин писал(а):zub писал(а):Дело в современных ос и безопасности. Давно уже нет прямого доступа к видеопамяти (как и комногим другим сушьностям),
я бы сказал, с win 1.0 нету. И речь не только в безопасности.
Alex2013 писал(а):и держать свой буфер на каждое окно и каждый элемент управления тоже мало эффективно .
zub писал(а):>>Мне бы не помешало быстрое копирование теневого битмапа на видимый
Надо иметь все буфера на стороне видеокарты, и ненадо ничего будет копировать
zub писал(а):>Придется правда от PaintВох отказаться заменив его на TImage или OGL контекст
В курсе что интерфейс предоставляемый OGL "чутьчуть" отличается от того что есть у канваса? метафайл уже не прокатит и реализацию опенгл канваса придется делать самому. в часности предстоит секас с шрифтами))
>>...и держать свой буфер на каждое окно и каждый элемент управления тоже мало эффективно .
Рассуждения о том чего незнаешь... как ты себе это представляешь подругому?
Alex2013 писал(а):Но мне нужно всего навсего скопировать уже готовый битмап на OGL контекст ...
Alex2013 писал(а):То есть идет из водимого окна команда нарисовать прямоугольник в драйвер предаются его размеры и цвет а дальше драйвер или вызывает аппаратную функцию или рисует фигуру сам прямо в видеопамяти .
Лекс Айрин писал(а):Alex2013 писал(а):Но мне нужно всего навсего скопировать уже готовый битмап на OGL контекст ...
Это все равно что перепечатать текст с картинки... он же уже готов. Не стоит забывать, что если его нет в видеопамяти, то толку от этого мало -- основной тормоз будет в перекачке данных из основной памяти.
zub писал(а):Что есть теневой буфер? Наверно есть какоето более привычное название этого дела?
>>Но мне нужно всего навсего скопировать уже готовый битмап на OGL контекст ...
Зачем это? вывести какуюто картинку?
А если ты все рисуешь в какойто теневой буфер то нафиг вообще OGL контекст
Добавлено спустя 3 минуты 50 секунд:
>>Я вычитал, что якобы OGL юзает ДМА мимо процессора а это значит что есть шанс что выйдет быстрее
Блин, пожалуй
// Копирую буфер на экран
PaintBox1.Canvas.CopyRect( R , BufBMP.Canvas, R );
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7