GetPixel()
От: Serg32M  
Дата: 02.07.02 15:03
Оценка:
Народ, я беру пиксели из картинки, загруженной в Пайнт, функцией GetPixel(), меня устраивает быстродействие, все меня устраивает (удивлены? то-то же . Только вот при переносе на другую машину цвета, возвращаемые этой функцией на той же самой картинке, разительно отличаются от тех, что получались на первой машине. ((

Наверное, я вообще неправильно подошел к решению проблемы.
Может кто-то помочь, хотя бы показать направление, куда копать? Ну а лучше кусок текста...

Заранее благодарю.

ЗЫЖ Пишу в форум по МФС потому что у меня все там делается на МФС, а то начнут щас посылать в ВинАпи.
Re: GetPixel()
От: Рома Россия  
Дата: 02.07.02 18:06
Оценка:
Здравствуйте Serg32M, Вы писали:

SM>Народ, я беру пиксели из картинки, загруженной в Пайнт, функцией GetPixel(), меня устраивает быстродействие, все меня устраивает (удивлены? то-то же . Только вот при переносе на другую машину цвета, возвращаемые этой функцией на той же самой картинке, разительно отличаются от тех, что получались на первой машине. ((


Что-то я не понял про Пайнт. А пиксели могут отличаться из-за того, что установлены разные видеорежимы, т.е разное количество цветов. Если количество цветов одинаковое, то отличаются RGB маски видеорежимов.
Re[2]: GetPixel()
От: Аноним  
Дата: 03.07.02 05:43
Оценка:
Здравствуйте Рома, Вы писали:

Р>Здравствуйте Serg32M, Вы писали:


/* поскипано */
Р>Что-то я не понял про Пайнт. А пиксели могут отличаться из-за того, что установлены разные видеорежимы, т.е разное количество цветов. Если количество цветов одинаковое, то отличаются RGB маски видеорежимов.

В пайнт загружена битмапка, я из своей проги ищу чайлд-виндоу пайнта, в котором она отображена, создаю девайсконтекст для етого окна, беру точку с помощью ГетПиксел().
Так вот от видеорежима(кол-ва цветов, разрешения) ничего не зависит(проверено), цвет, взятый сабжем, неизменен при запусках проги на какой-то одной машине. Но как только я запущаю ее на другой — для тех же контрольных точек картинки возвращаются другие значения цветов.
Re[3]: GetPixel()
От: Рома Россия  
Дата: 03.07.02 06:58
Оценка:
Р>>Здравствуйте Serg32M, Вы писали:

А>Так вот от видеорежима(кол-ва цветов, разрешения) ничего не зависит(проверено), цвет, взятый сабжем, неизменен при запусках проги на какой-то одной машине. Но как только я запущаю ее на другой — для тех же контрольных точек картинки возвращаются другие значения цветов.


Ну видимо может быть две проблемы.
1) неправильно берутся координаты точки
2) всё-таки маски для RGB состовляющих отличаются на этих машинах.
Цветовые компоненты можно получить.

 
GetBValue(
  WORD rgb     // 32-bit RGB value
);  
GetGValue(
  WORD rgb     // 32-bit RGB value
);  
GetRValue(
  WORD rgb     // 32-bit RGB value
);


Попробуй может действитнельно маски отличаются.
Вот код для их определения (ф-ии в API я не нашёл)

   //вход: x,y - координаты
   DWORD r,g,b;
   int rshift,bshift,gshift;
   DWORD pixel;
   r=g=b=1;
   rshift=gshift=bshift=-1;
   HDC hdc=GetDC(hwnd);
   do
   {
        pixel=RGB(r,0,0);
        pixel=SetPixel(hdc,x,y,pixel);
        pixel=GetPixel(hdc,x,y);
        r<<=1;
        rshift++;
   }
   while(!pixel);
   //для остальных цветовых соствавляющих тоже самое.
   //.... 
   ReleaseDC(hwnd,hdc);

rshift, например, показывает сколько младших бит красного цвета теряется.
Попробую вообщем.
Re[4]: GetPixel()
От: Александр Коуров  
Дата: 04.07.02 06:01
Оценка:
А BitBlt не прикалывает?
Independent software developer
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.