Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Delphi > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail


Ответ
 
Опции темы
Старый 09.10.2017, 23:43   #1
Rockot
Форумчанин
 
Аватар для Rockot
 
Регистрация: 01.06.2012
Сообщений: 139
Репутация: 26

icq: 385119880
skype: worthywarrior
Восклицание Баг с передачей изображения.

Доброго времени суток всем. Подскажите пожалуйста, найти баг.

При отправке с одного компьютера из 5-ти, изображение приходит не полностью, а именно, кусок, то беж на изображении видно часть иконок верхнего левого угла, а панели задач и трей не видно такое ощущение, что приходит 800x600 из 2000x1000, только на одной машине данная история ниже приложу получение передачу и приём stream.

Критикуйте код, но помогите пожалуйста.

Передача:
Код:

var
  SImg: TMemoryStream;
  Bmp: TBitmap;
  JpegIm: TJpegImage;
begin
  try
    SImg := TMemoryStream.Create;
    Bmp := TBitmap.Create;
    try
      Bmp.Width := GetDeviceCaps( GetDC(0), HORZRES );     //
      Bmp.Height := GetDeviceCaps( GetDC(0), VERTRES );   //GetDeviceCaps( GetDC(0), VERTRES )
      BitBlt( Bmp.Canvas.Handle, 0, 0, GetDeviceCaps( GetDC(0), HORZRES ), GetDeviceCaps( GetDC(0), VERTRES ),
             GetDC( 0 ), 0, 0,SRCCOPY );
      JpegIm := TJpegImage.Create;
      JpegIm.Assign( Bmp );
      JpegIm.CompressionQuality := uClient.Compress;
      JpegIm.Compress;
      SImg.Position := 0;
      JpegIm.SaveToStream( SImg );
      SImg.Position := 0;
      TCPClientScreen.IOHandler.Write( SImg, SImg.Size, False );
    finally
      SImg.Clear;
      FreeAndNil( Bmp );
      FreeAndNil( JpegIm );
      FreeAndNil( SImg );
    end;
  except
    //Добавить
  end;
end;

Приём:
Код:

var
  SImg: TMemoryStream;
  JpegIm : TJPEGImage;
begin
  SImg := TMemoryStream.Create;
  JpegIm := TJPEGImage.Create;
  try
    Inc( i );
    SImg.Position := 0;
    AContext.Connection.IOHandler.ReadStream( SImg, SImg.Size, True );
    lblTestSize.Caption := IntToStr( SImg.Size );
//    SImg.Position := 0;
//    SImg.SaveToFile( ExtractFileDir( ParamStr( 0 ) ) + '\img\' + IntToStr( i ) + '.jpg' );
    SImg.Position := 0;
    JpegIm.LoadFromStream( SImg );
    fGetScreen.imgScreen.Picture.Bitmap.Assign( JpegIm );
    fGetScreen.lblSizeImg.Caption := 'Размер изображения - ' +
      IntToStr( SImg.Size div 1024 ) + '0 Кбайт';
  finally
    FreeAndNil( SImg );
    FreeAndNil( JpegIm );
    AContext.Connection.IOHandler.Free;
  end;
end;

Изображения
Тип файла: jpg 1.jpg (115.6 Кб, 3 просмотров)
__________________
Следствие: 99% проблем, сваливаемых на Microsoft, является следствием тупости самих программистов.
Rockot вне форума   Ответить с цитированием
Старый 10.10.2017, 14:21   #2
Rockot
Форумчанин
 
Аватар для Rockot
 
Регистрация: 01.06.2012
Сообщений: 139
Репутация: 26

icq: 385119880
skype: worthywarrior
По умолчанию

забыл добавить приложение стартует от службы, может ли это как-то влиять? Т.к. тестил с обычным приложением всё отрабатывает хорошо.
__________________
Следствие: 99% проблем, сваливаемых на Microsoft, является следствием тупости самих программистов.
Rockot вне форума   Ответить с цитированием
Старый 10.10.2017, 16:17   #3
Black Fregat
Программист
Профессионал
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,021
Репутация: 675
По умолчанию

А там не два монитора случайно?
Black Fregat вне форума   Ответить с цитированием
Старый 10.10.2017, 16:28   #4
Rockot
Форумчанин
 
Аватар для Rockot
 
Регистрация: 01.06.2012
Сообщений: 139
Репутация: 26

icq: 385119880
skype: worthywarrior
По умолчанию

Цитата:
Сообщение от Black Fregat Посмотреть сообщение
А там не два монитора случайно?
Нет, там один монитор, ноутбук, но судя по всему мне тут никто не поможет, разве что в теории.

Написал точно такое же приложение ctrl+c ctrl+v код из того, что есть, только оно запускается и делает снимок, так вот там всё норм.

История такая, что я делаю скрин в потоке и предварительно запускается программа от службы( то есть служба запускает приложение ), при отправке проверял битмап, он размера именно, того что нужно, но сохраняешь в файл на стороне клиента и всё равно белеберда.

Странно, что вообще приходит или сохраняет, написал бы ошибку какую нибудь.
__________________
Следствие: 99% проблем, сваливаемых на Microsoft, является следствием тупости самих программистов.
Rockot вне форума   Ответить с цитированием
Старый 10.10.2017, 17:54   #5
kropotkina-alice
Участник клуба
 
Аватар для kropotkina-alice
 
Регистрация: 27.10.2014
Адрес: в России
Сообщений: 596
Репутация: 588
По умолчанию

Цитата:
то беж на изображении... Критикуйте код
А заодно и подачу материала
То бишь, а не "то беж"...
kropotkina-alice вне форума   Ответить с цитированием
Старый 10.10.2017, 18:03   #6
Rockot
Форумчанин
 
Аватар для Rockot
 
Регистрация: 01.06.2012
Сообщений: 139
Репутация: 26

icq: 385119880
skype: worthywarrior
По умолчанию

Цитата:
Сообщение от kropotkina-alice Посмотреть сообщение
А заодно и подачу материала
То бишь, а не "то беж"...
Но радАсть тиби я ещи бальши нопешу ашебак, лешь би памагла.
__________________
Следствие: 99% проблем, сваливаемых на Microsoft, является следствием тупости самих программистов.
Rockot вне форума   Ответить с цитированием
Старый 11.10.2017, 13:24   #7
dummy_user
Форумчанин
 
Аватар для dummy_user
 
Регистрация: 02.03.2013
Адрес: Сибирь
Сообщений: 109
Репутация: 27

skype: raw_2_raw
По умолчанию

Попробуйте Screen.Width, а не GetDeviceCaps(HORZRES).

После GetDC() нужно релизить HDC обязательно! Иначе утечки памяти неизбежны.

Также у вас JpegIm не в том месте удаляется, нужно сделать отдельный блок try/finally для него иначе опять будут утечки памяти.

Последний раз редактировалось Alex11223; 11.10.2017 в 13:30.
dummy_user вне форума   Ответить с цитированием
Старый 12.11.2017, 17:31   #8
Aliens_wolfs
Участник клуба
 
Регистрация: 16.12.2009
Адрес: WWW ЛЕНИНГРАД СПб точка РУ
Сообщений: 843
Репутация: 435
По умолчанию

Цитата:
При отправке с одного компьютера из 5-ти, изображение приходит не полностью
Все правильно что изображение не полностью приходит, в приеме нужно делать так сказать накопительный буфер иногда данные кусками идут при перегрузе например сокета, когда в него все данные поступят тогда и выводить результат в процедуре если есть WorkEnd или по истечении допустим времени уже простоя или проверку на размер принятых данных ну или по своей метке конца принятых данных.

Последний раз редактировалось Aliens_wolfs; 12.11.2017 в 17:56.
Aliens_wolfs вне форума   Ответить с цитированием
Старый 12.11.2017, 17:48   #9
Rockot
Форумчанин
 
Аватар для Rockot
 
Регистрация: 01.06.2012
Сообщений: 139
Репутация: 26

icq: 385119880
skype: worthywarrior
По умолчанию

Цитата:
Сообщение от Aliens_wolfs Посмотреть сообщение
Все правильно что изображение не полностью приходит, в приеме нужно делать так сказать накопительный буфер иногда данные кусками идут при перегрузе например сокета, когда в него все данные поступят тогда и выводить результат по истечении допустим времени уже простоя или проверку на размер принятых данных ну или метку конца принятых данных.
Нет ты не понял, это проявилось на 1-ой только машине, я не идиот и перезапускал и клиент и сервер, это наблюдается всегда, почему-то размеры экрана задавались ложными и пришлось для конкретной машины, прописывать константами.
__________________
Следствие: 99% проблем, сваливаемых на Microsoft, является следствием тупости самих программистов.
Rockot вне форума   Ответить с цитированием
Старый 12.11.2017, 18:02   #10
Aliens_wolfs
Участник клуба
 
Регистрация: 16.12.2009
Адрес: WWW ЛЕНИНГРАД СПб точка РУ
Сообщений: 843
Репутация: 435
По умолчанию

Странно, обычно бывает то что я описал, а что за винда на той машине где проблема была? Это так для любопытства
Aliens_wolfs вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Классы. Чтение и создание .bmp изображения. Пропадает 1 пиксел при создании изображения. s-mumrik Visual C++ 3 12.04.2013 21:21
Проблемы с передачей праведный HTML и CSS 4 10.05.2012 11:59
Чат с передачей изображения на Java kestugar Помощь студентам 3 28.11.2011 19:11
Проблема с передачей( фтпуд17 Свободное общение 5 27.01.2011 12:23
Проблема с передачей куки arwm Работа с сетью в Delphi 7 29.12.2007 00:44


11:09.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru