Эта статья, посвящена работе над ошибкой, вызванной работой с TBitmap. Начну, пожалуй, с задач, которые ставились передо мной в ходе работы. Она будет полезна как при создании переходов текстур в играх, так и при прорисовке Bitmap с маской изображения.
Мне необходимо было в редакторе карт, который я создаю сделать неровные переходы между текстурами. Выход я нашел следующий. Сначала загружаю в один Bitmap монотонную картинку текстур (желтую, красную, синюю и т.д.). Затем загружаю в другой TBitmap черно-белую картинку, которая является маской для текстур. Черным цветом выделена область, которая не должна рисоваться, а белым выделена область самого неровного перехода.
Тоесть налаживая маску поверх самогой текстуры, при этом делая прозрачным белый цвет. Мы получим переход нужной текстуры, но с черным фоном вокруг. Теперь останется только рисовать данные переходы, но уже с прозрачным черным цветом.
Но каково было мое удивление, когда у меня рисовалась только черно белая маска, а не сама текстура. Я попробывал рисовать только текстуру, но не рисовалось ничего. Тогда пришлось прибегать к другим методам прорисовки картинок, а не стандартый Canvas.draw. Ни один из рассмотренных мною методов результатов не дали. Правда я не стал принципиально прибегать к DirectX и OpenGL. Не хочу использовать дополнительные бибилиотеки.
Затем я посчитал, что ошибка TBitmap вызвана проблемами с TransparentColor и Transparent в общем. Путем научного тыка - я не добился никаких положительных результатов.
Методом создания и проверки собственных теорий по поводу вызванной ошибки я предположил, что возможно ошибка заключается именно в монотонности цвета. Вся картинка текстуры была залита одним цветом без оттенков. И когда я добавил просто точечки на текстуры другого цвета. Bitmap начала отлично прорисовываться. Но прорисовывалась только для нулевой текстуры, которая вообще не должна иметь переходов
for g:=0 to m-1 do for i:=1 to n do for j:=1 to 8 do begin Graf.PerIMG[g,i,j]:=TBitmap.Create; Graf.PerIMG[g,i,j].Width:=32; Graf.PerIMG[g,i,j].Height:=32;
После долгих раздумий я нашел ошибку. Она была не связана с тем, что Я неправильно расставлял и загружал переходы И когда я добавил прозрачности и в маску и в итогое изображение, то Bitmap и маска изображения начали отлично прорисовываться.
Я нарисовал на все 8 сторон по 4 варианта перехода. И с помощью данного алгоритма мне не прийдется рисовать для 8 текстур 4 варианта по 8 поворотов. Вместо 184 картинок переходов я нарисовал лишь 24 маски переходов и получился тот же эффект. Всем новичкам не работающим с дополнительными графическими бибилиотеками советую использовать данный метод прорисовки TBitmap и маски изображения для разработки игр и других мультимедийных приложений.