powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Scanline в потоке течь
7 сообщений из 7, страница 1 из 1
Scanline в потоке течь
    #39512998
vlkc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый вечер, есть функция:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
function BmpToMem1(Bmp:TBitmap;var W,H:integer):pointer;
  var
    p1:pointer;
    y1:integer;
  begin
      if Bmp.PixelFormat<>pf24bit then
        raise exception.Create('Bad BMP format');

      W:=Bmp.Width;
      H:=Bmp.Height;
      GetMem(Result,3*W*H);
      p1:=Result;
      for y1:=0 to H-1 do
      begin
        Move(Bmp.ScanLine[y1]^,p1^,3*W);
        integer(p1):=NativeInt(p1)+3*W;
      end;
  end;



При использовании в потоке она течет (oставляет после себя DC и Bitmap). Как исправить?
...
Рейтинг: 0 / 0
Scanline в потоке течь
    #39513024
Няшик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну тэк потоке потом и удаляй то, что на копировал, в выделенную память через getmem
...
Рейтинг: 0 / 0
Scanline в потоке течь
    #39513031
vlkc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Няшик,

Вы об етом: FreeMem(p);
...
Рейтинг: 0 / 0
Scanline в потоке течь
    #39513043
Няшик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vlkcНяшик,

Вы об етом: FreeMem(p);

Да. И после использования остальных открытых ресурсов - закрывай их
...
Рейтинг: 0 / 0
Scanline в потоке течь
    #39513045
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vlkcПри использовании в потоке она течет (oставляет после себя DC и Bitmap). Как исправить? Для начала нужно ошибку в коде исправить, будет неправильно работать если размер строки в пикселях не кратен 4.
DC будет уничтожено в процедуре обработки сообщений, битмап нужно ручками.
...
Рейтинг: 0 / 0
Scanline в потоке течь
    #39513048
vlkc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Соколинский БорисvlkcПри использовании в потоке она течет (oставляет после себя DC и Bitmap). Как исправить? Для начала нужно ошибку в коде исправить, будет неправильно работать если размер строки в пикселях не кратен 4.
DC будет уничтожено в процедуре обработки сообщений, битмап нужно ручками.

А можно на моем примере?
...
Рейтинг: 0 / 0
Scanline в потоке течь
    #39513110
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vlkcСоколинский Бориспропущено...
Для начала нужно ошибку в коде исправить, будет неправильно работать если размер строки в пикселях не кратен 4.
DC будет уничтожено в процедуре обработки сообщений, битмап нужно ручками.

А можно на моем примере?

он
Соколинский БорисDC будет уничтожено в процедуре обработки сообщений, битмап нужно ручками.
имеет ввиду, что Canvas лочить надо
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
function BmpToMem1(Bmp:TBitmap;var W,H:integer):pointer;
  var
    p1:pointer;
    y1:integer;
  begin
      if Bmp.PixelFormat<>pf24bit then
        raise exception.Create('Bad BMP format');
      Bmp.Canvas.Lock;
      try 
        W:=Bmp.Width;
        H:=Bmp.Height;
        GetMem(Result,3*W*H);
        p1:=Result;
        for y1:=0 to H-1 do
        begin
          Move(Bmp.ScanLine[y1]^,p1^,3*W);
          integer(p1):=NativeInt(p1)+3*W;
        end;
      finally
        Bmp.Canvas.Unlock;
      end;  
  end;


да и результат GetMem проверять желательно, или использовать AllocMem
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Scanline в потоке течь
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]