Чудеса с палитрой
От: Bucha  
Дата: 01.12.03 07:48
Оценка:
Добрый день. Столкнулся с такой проблемой. При изменении палитры Bitmap->Palette=newpal
меняются сами элементы получаемые с помощью ScanLine.
Что за грабли может кто сталкивался???? Работаю под Builder5 c++.
Image1 и Image2-содержат одну и тужу 8BIT картинку
Вызываю функцию Compare для проверки элементв все ОК,
после изменения палитры ChangePalette() cбой. Пробовал создавать палитру и другими способами в том числе
CreatePalette -все равно тот же результат.



//Изменение палитры
void ChangePalette()
{
HPALETTE hpal=CopyPalette(Image2->Picture->Bitmap->Palette);
PALETTEENTRY mypal[256];
DeleteObject(Image2->Picture->Bitmap->ReleasePalette());
GetPaletteEntries(hpal,0,255,mypal);
     for (int i=0;i<256;i++)
    {
      mypal[i].peRed=random(255);
      mypal[i].peGreen= random(255);;
      mypal[i].peBlue =random(255);;
    }
 SetPaletteEntries(hpal,0,255,mypal);
 Image2->Picture->Bitmap->Palette=hpal;
}

void Compaare();
{
int mwidth=Image1->Picture->Bitmap->Width;
int mheigh=Image1->Picture->Bitmap->Height;
byte *ptr1,*ptr2;
for (int i=0;i<mheigh;i++)
        {
        ptr1=(byte*)Image1->Picture->Bitmap->ScanLine[i];
        ptr2=(byte*)Image2->Picture->Bitmap->ScanLine[i];
        for (int j=0;j<mwidth;j++)
        {
                if (ptr1[j]!= ptr2[j])
                   {
                   MessageBox(Application->Handle,AnsiString(AnsiString("Целостность нарушена")+"(" +AnsiString(i)+","+AnsiString(j)+")   "+AnsiString(ptr1[j])+" - "+AnsiString(ptr2[j])).c_str(),"Внимание",MB_OK);
                   return;
                   }
                }//for (int i=0;i<mheigh;i++)
        }//for (int i=0;i<mheigh;i++)
MessageBox(Application->Handle,"все нормально","Внимание",MB_OK);
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.