Модератор: Модераторы
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 писал(а):Упс ... вопрос читал ? понял про что в приведеном куске ?
 ... Начал отвечать верно, а потом увлекся разборкой с   RawImage и забыл на что отвечал .
 ... Начал отвечать верно, а потом увлекся разборкой с   RawImage и забыл на что отвечал .  
   
 zub писал(а):Дело в современных ос и безопасности. Давно уже нет прямого доступа к видеопамяти (как и комногим другим сушьностям),

Лекс Айрин писал(а):zub писал(а):Дело в современных ос и безопасности. Давно уже нет прямого доступа к видеопамяти (как и комногим другим сушьностям),
я бы сказал, с win 1.0 нету. И речь не только в безопасности.

 https://www.youtube.com/watch?v=TZMT9bd-9YQ
 https://www.youtube.com/watch?v=TZMT9bd-9YQAlex2013 писал(а):и держать свой буфер на каждое окно и каждый элемент управления тоже мало эффективно .

zub писал(а):>>Мне бы не помешало быстрое копирование теневого битмапа на видимый
Надо иметь все буфера на стороне видеокарты, и ненадо ничего будет копировать
zub писал(а):>Придется правда от PaintВох отказаться заменив его на TImage или OGL контекст
В курсе что интерфейс предоставляемый OGL "чутьчуть" отличается от того что есть у канваса? метафайл уже не прокатит и реализацию опенгл канваса придется делать самому. в часности предстоит секас с шрифтами))


>>...и держать свой буфер на каждое окно и каждый элемент управления тоже мало эффективно .
Рассуждения о том чего незнаешь... как ты себе это представляешь подругому?
Alex2013 писал(а):Но мне нужно всего навсего скопировать уже готовый битмап на OGL контекст ...
Alex2013 писал(а):То есть идет из водимого окна команда нарисовать прямоугольник в драйвер предаются его размеры и цвет а дальше драйвер или вызывает аппаратную функцию или рисует фигуру сам прямо в видеопамяти .

Лекс Айрин писал(а):Alex2013 писал(а):Но мне нужно всего навсего скопировать уже готовый битмап на OGL контекст ...
Это все равно что перепечатать текст с картинки... он же уже готов. Не стоит забывать, что если его нет в видеопамяти, то толку от этого мало -- основной тормоз будет в перекачке данных из основной памяти.
 Я вычитал, что якобы OGL юзает ДМА мимо процессора, а это значит, что   есть шанс, что выйдет быстрее.
 Я вычитал, что якобы OGL юзает ДМА мимо процессора, а это значит, что   есть шанс, что выйдет быстрее.zub писал(а):Что есть теневой буфер? Наверно есть какоето более привычное название этого дела?
>>Но мне нужно всего навсего скопировать уже готовый битмап на OGL контекст ...
Зачем это? вывести какуюто картинку?
А если ты все рисуешь в какойто теневой буфер то нафиг вообще OGL контекст
Добавлено спустя 3 минуты 50 секунд:
>>Я вычитал, что якобы OGL юзает ДМА мимо процессора а это значит что есть шанс что выйдет быстрее
Блин, пожалуй
// Копирую буфер на экран
PaintBox1.Canvas.CopyRect( R , BufBMP.Canvas, R );

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1