1. Набираем команду codeby webinar. Набираем команду для организации и проведения вебинаров. Подробнее ...

    Скрыть объявление
  2. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление
  3. Получи 30.000 рублей. Для получения денег необходимо принять участие в конкурсе авторов codeby. С условиями и призами можно ознакомиться на этой странице ...

    Внимание! Регистрация авторов на конкурс закрыта.

    Скрыть объявление

Цвет точки

Тема в разделе "Delphi - программирование", создана пользователем SOV, 30 сен 2006.

Статус темы:
Закрыта.
  1. SOV

    SOV Гость

    Репутация:
    0
    На форме элементарно просто можно нарисовать кружек, квадрат, точку, ... заранее определенного цвета.
    А вот как узнать цвет заранее определенной точки (например узнать цвет в целочисленном формате)?
     
  2. SOV

    SOV Гость

    Репутация:
    0
    Подскажите пожалуйста еще с одним похожим нюансом.
    Как узнать цвет (в целочисленном формате) определенного пикселя графического файла (bmp и jpg).
    Помогите исходником.
     
  3. Гость

    Репутация:
    0
    :) Елементарно!

    //Цвет пикселя на форме за координ. точки.
    var color:Tcolor;
    begin
    color:=form1.canvas.pixels[x,y];
    end;
    //Цвет color будет равно прибл. =1000000; вот такому числу;
    //ето код цвета;
    //если нужно витянуть RGB, пиши я позже отвечу!


    //Насчет bmp и (jpg :( ) файлов тоже просто!
    //Увы я могу помочь только с bmp
    var bit:Tbitmap;
    color:Tcolor;
    begin
    bit:=TBitmap.create;
    bit.LoadFromFile('*.bmp');
    color:=bit.Canvas.Pixels[x,y];
    end;






    :( Чето типа того! Юзайте!

    Извеняюсь!
    free(bit); :)
     
  4. SOV

    SOV Гость

    Репутация:
    0
    Большое спасибо вам :)
     
  5. Гость

    Репутация:
    0
    Если че обрящайся! Чем смогу помогу! :)
     
  6. sab0tage

    sab0tage Гость

    Репутация:
    0
    Я бы использовал GetPixel

    Код:
     
    function DesktopColor(const X, Y: Integer): TColor;
    var
    c: TCanvas;
    begin
    c := TCanvas.Create;
    try
    c.Handle := GetWindowDC(GetDesktopWindow);
    Result  := GetPixel(c.Handle, X, Y);
    finally
    c.Free;
    end;
    end;
     
  7. Zuzlan

    Zuzlan Гость

    Репутация:
    0
    Поскольку цвет определяется тремя цветами (RGB), то было бы удобнее воспользоваться следующим:
    Код:
    r:=GetRValue(image1.Picture.Bitmap.Canvas.Pixels[i,j])
    g:=GetGValue(image1.Picture.Bitmap.Canvas.Pixels[i,j])
    b:=GetBValue(image1.Picture.Bitmap.Canvas.Pixels[i,j])
    где r,g,b типа integer и находятся в диапозоне от 0 до 255

    Что же касается JPG файлом, то сперва их нужно конвертировать в bitmap
    Удобнее всего для этого - воспользоваться процедурой:

    Код:
    procedure AnyToBitmap(Bmp:Graphics.TBitmap;const FileName:string);
    var
    OleGraphic:TOleGraphic;
    Stream:TFileStream;
    begin
    Stream:=TFileStream.Create(FileName,fmOpenRead or fmShareDenyWrite);
    try
    OleGraphic:=TOleGraphic.Create;
    try
    OleGraphic.LoadFromStream(Stream);
    Bmp.Width:=OleGraphic.Width;
    Bmp.Height:=OleGraphic.Height;
    Bmp.Palette:=OleGraphic.Palette;
    Bmp.Transparent:=OleGraphic.Transparent;
    Bmp.Canvas.Draw(0,0,OleGraphic);
    finally
    OleGraphic.Free;
    end;
    finally
    Stream.Free;
    end;
    end;

    А вообще на королевстве делфи эти вопросы поднимались много раз, поэтому там можно найти более исчерпывающие ответы по этой теме...

    Сам же я интересуюсь сравниванием изображений... Причем попиксельно не очень бы холтелось, потому как это отнимает много времени... Есть идеи?
     
  8. SOV

    SOV Гость

    Репутация:
    0
    Большео всем спасибо за помощь.
    Но насчет jpeg фйлов есть одно маленькое но.
    Не хотелось бы загружать весть вайл, чтобы узнать цвет всего одной точки.
    По задумке, ихзображение будет находиться в нескольких файлох подобного формата.
    И при масштабировании необходимо более рациональнее использавть рксурсы, для увеличения скорости.
    Может у кого нибудь есть реальный алгоритм по конвертированию jpeg файлов. Тоесть надо нать в bmp не цельный файл а только одну конуретную матрицу 8х8.

    Насчает сравнивания изображений, пока не сталкивался с этими вопросами.
    но в последнее время становятся популянрыми фрактальные алгоритмы.
    Несколько тем, правда не по сравнению, а по сжатию изображений рассматриваются на сайтах
    http://www.compression.ru/
    http://compression.graphicon.ru/
    А насчет идеи, вохможно както можно сравнивать изобрадения по плотности, и насыщености цветов. Это просто идея в толпу ;)
    Еще разок большое спасибо всем за помощь и идеи.
     
  9. Pradov

    Pradov Гость

    Репутация:
    0
    А как быть с флешь?Очень надо.....и анимация через определенный промежуток времени движеться!
     
  10. Zuzlan

    Zuzlan Гость

    Репутация:
    0
    Вот как быть с флешками не знаю... вернее знаю, но механизм реализации не самых лучших... но как вариант...
    Вобщем можно делать принтскрины экрана, а потом искать позицию и вырезать.
    Скорее всего можно и проще... я бы на твоем месте на королевстве поискал
     
  11. zubr

    zubr Гость

    Репутация:
    0
    1. Создать совместимый контекст устройства CreateCompatibleDC.
    2. Создать и проинициализировать структуру BITMAPINFO размером с точку.
    3. Создать дибсекцию CreateDibSection с созданной структурой BITMAPINFO.
    4. Выбрать в созданном контексте созданную дибсекцию SelectObject.
    5. Скопировать из контекста, где отображается флеш в созданный контекст нужную точку BitBlt.
    6. Получить RGB-байты этой точки с помощью функции GetDiBits.
    7. Очистить все что создали.
     
  12. Pradov

    Pradov Гость

    Репутация:
    0
    zubr )) Респект)Спасибо)))
    еси че напишу)
     
  13. Aim Destroyer

    Aim Destroyer Гость

    Репутация:
    0
    А как определить цвет серой точки рисунка в оттенках серого так, чтоб она была равна 1..256?
     
  14. Zuzlan

    Zuzlan Гость

    Репутация:
    0
    Особонностью серого цвета является то, что все 3 цвета(RGB) имеют одинаковые значения...
    Т.е. (12,12,12) или (145,145,145). Чем ближе к значению 255, тем светлее.
    Для того что бы перевести картинку в ч.б.(с оттенками) я просто брал общее арифметическое RGB.
    Если нужно на выходе получить вообще только 2 цвета, то находишь среднее значение RGB на всей картинке и сравниваешь его со всеми точками, если точка оказывается темнее, то присваиваешь ей черный цвет (0,0,0) и наоборот...
     
  15. Aim Destroyer

    Aim Destroyer Гость

    Репутация:
    0
    Большое спасибо!!! :)
    А то я пыталься найти кубический корень каждой точки на картинке и моя прога начинала глючить, ошыбки выдавать.... Видно комп не выдержал.
     
  16. Zuzlan

    Zuzlan Гость

    Репутация:
    0
    А ошибки могли вылетать потому, что кубический корень на выходе не дает целого числа... нужно было сделать div 1
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей