Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.03.2016, 23:39   #1
darkwellroad
Пользователь
 
Регистрация: 01.09.2013
Сообщений: 83
По умолчанию Аналог StretchBlt

Привет всем. Вот интересуюсь, есть ли в природе функции для изменения размера изображения, реализованных не через WinAPI. Изображения представляют собой черные и белые пиксели. Нужно, чтобы при растягивании/сужении пиксели округлялись до черного и белого. Говорить что не нужно изобретать колесо и т.п. не надо. Просто хочу спросить знающих людей. Заранее спасибо
darkwellroad вне форума Ответить с цитированием
Старый 22.03.2016, 23:46   #2
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

имхо, знающие люди не занимаются изобретением квадратных колёс, ибо у них нет на это времени. если чел уверен, что то, что он придумает, будет заведомо хуже того, что уже есть, он тупо не будет тратить на это свой главный ресурс, т.к. жизнь одна (если он не кот).
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 22.03.2016, 23:52   #3
darkwellroad
Пользователь
 
Регистрация: 01.09.2013
Сообщений: 83
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
имхо, знающие люди не занимаются изобретением квадратных колёс, ибо у них нет на это времени. если чел уверен, что то, что он придумает, будет заведомо хуже того, что уже есть, он тупо не будет тратить на это свой главный ресурс, т.к. жизнь одна (если он не кот).
Ну, что и думал услышать.. Дело в том, что при использовании StretchBlt после некоторого времени работы программы получаю ошибку о переполнении Header'ами. Как не пытался использовать ReleaseDC, как рекомендовали на форумах - ошибка продолжает лезть. А функция нужна, т.к. почти все изображения в приложении хранятся в массивах. Вот думал написать функцию изменения размера массива из 0 и 1, но решил спросить, может таковые есть. Почти всю работу закончил. Успешно распознаю 90% изображений, но эта ошибка не решилась. Если ты знаешь - направь просто в нужную сторону. Я не совсем толковый программист, но все когда-то учатся
darkwellroad вне форума Ответить с цитированием
Старый 23.03.2016, 00:03   #4
vlad1389
Форумчанин
 
Регистрация: 02.02.2016
Сообщений: 290
По умолчанию

Цитата:
Дело в том, что при использовании StretchBlt после некоторого времени работы программы получаю ошибку о переполнении Header'ами. Как не пытался использовать ReleaseDC, как рекомендовали на форумах - ошибка продолжает лезть
Выкинь кусок кода на форум, вдруг кто найдёт ошибку
vlad1389 вне форума Ответить с цитированием
Старый 23.03.2016, 00:04   #5
TaLadno
Форумчанин
 
Регистрация: 03.06.2015
Сообщений: 393
По умолчанию

Цитата:
Сообщение от darkwellroad Посмотреть сообщение
Дело в том, что при использовании StretchBlt после некоторого времени работы программы получаю ошибку о переполнении Header'ами. Как не пытался использовать ReleaseDC, как рекомендовали на форумах - ошибка продолжает лезть.
Код покажешь?
Вы там держитесь.
TaLadno вне форума Ответить с цитированием
Старый 23.03.2016, 00:07   #6
darkwellroad
Пользователь
 
Регистрация: 01.09.2013
Сообщений: 83
По умолчанию

Код:
JPEG.LoadFromStream(MemStream);
PNG := Tpngimage.CreateBlank(COLOR_RGB, 8, JPEG.Width, JPEG.Height);
PNG.Canvas.Draw(0, 0, JPEG);
ToBlackWhiteImage(PNG, 220);
GetLetters(PNG, Letters, 32);
CombineLetters(Letters, 40, 5);
DeleteLittleRegions(5, Letters);
for I := 0 to Length(Letters) - 1 do
  begin
    StretchBlt(LetterBitmap.Canvas.Handle, 0, 0, LetterBitmap.Width, LetterBitmap.Height, PNG.Canvas.Handle, Letters[I].MinX, Letters[I].MinY, Abs(Letters[I].MaxX - Letters[I].MinX), Abs(Letters[I].MaxY - Letters[I].MinY), SRCCOPY);
    answer := answer + CompareWithBase(CaptchaBase, LetterBitmap);
  end;
Все что до цикла - преподготовка и сегментация. Там все отлажено. Просто StretchBlt комментировал и запускал прогу без этой функции. Работало все на ура. Все освобождаю через FreeAndNil. Проверял через ReportMemoryLeaksOnShutdown := true; Letters - массив, содержащий координаты и вес

Последний раз редактировалось darkwellroad; 23.03.2016 в 00:10.
darkwellroad вне форума Ответить с цитированием
Старый 23.03.2016, 00:12   #7
vlad1389
Форумчанин
 
Регистрация: 02.02.2016
Сообщений: 290
По умолчанию

CompareWithBase что это?
vlad1389 вне форума Ответить с цитированием
Старый 23.03.2016, 00:17   #8
darkwellroad
Пользователь
 
Регистрация: 01.09.2013
Сообщений: 83
По умолчанию

Цитата:
Сообщение от vlad1389 Посмотреть сообщение
CompareWithBase что это?
Сравнение изображения, кусок которого мы обрезали с массивом. Сравнение сходства и вычисление наиболее схожей записи. Массив - 0-255 из 0 и 1
Код:
function CompareWithBase(const CaptchaBase: TCaptchaBase; const IntroLetter: TBitMap): String;
var
  I, I2: Byte;
//-------//
begin
  for I := 0 to Length(CaptchaBase) - 1 do
    begin
      Current := 0;
      for I2 := 0 to Length(CaptchaBase[I]) - 1 do
        if IntroLetter.Canvas.Pixels[I2 mod 16, I2 div 16] = clBlack then
          begin
            //-------//
          end
        else
          begin
            //-------//
          end;
      //-------//
    end;
  Result := ''; //-------//
end;
Работа с изображением - это только получение цвета пикселя. В //-------// чисто математические действия, сравнение массивом нейрона. Там ошибок тоже нет
darkwellroad вне форума Ответить с цитированием
Старый 23.03.2016, 00:21   #9
darkwellroad
Пользователь
 
Регистрация: 01.09.2013
Сообщений: 83
По умолчанию

StretchBlt выполняется в программе около 10к раз и после этого получаю http://programmersforum.ru/showthread.php?t=289008
darkwellroad вне форума Ответить с цитированием
Старый 23.03.2016, 00:21   #10
vlad1389
Форумчанин
 
Регистрация: 02.02.2016
Сообщений: 290
По умолчанию

Цитата:
Там ошибок тоже нет
Если ты так уверен, что ошибок ни где нет, то как ты объяснишь ошибку, из за которой создал этот топик? Сама по себе появилась? Ошибка в твоём коде. В том, что ты предоставил, я ошибок не вижу. Значит ошибка в том коде, который ты не предоставил.
vlad1389 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание скриншотов StretchBlt Andreyy Общие вопросы Delphi 1 19.07.2011 17:44
Аналог 1С alexvav Свободное общение 13 29.03.2011 14:11
Проблема со StretchBlt в C++ Builder Master07 C++ Builder 3 11.02.2010 11:32
AlphaBlend, StretchBlt - отказывается отрисовавывать HDC BOBAH13 Win Api 0 17.01.2010 18:42
Аналог try. beemoto Общие вопросы Delphi 16 16.12.2009 18:33