Прошу помощи.
Опять ничего не получается. Никак не могу понять, в чём проблема. Наверно опять, что-то напутал с типами данных, но немогу понять, что именно. Сделал вывод в окно двух буферов, функцией Blit из newlib: первый буфер (p_img) залит красным цветом, второй (p_img2) жёлтым. В буфер залитый красным цветом хотел встроить изображение из второго буфера, просидел вчера целый день, но так ничего и не получилось. Написал функцию, которая неработает, с которой очень долго мучался, но позже понял, что дело не в функции. Закоментировал функцию и попробовал поместить в первый буфер два пикселя, жёлтого цвета. Но,
получились теже яйца, только в профиль выводится красный прямоугольник с жёлтой полосой по вертикали, толщиной в два пикселя, а должен быть красный прямоугольник с желтой полосой по горизонтали, длиной в два пикселя.
Что не так?
Code: Select all
#include <stdlib.h>
#include <kos32sys.h>
#define IMG_WIDTH 70
#define IMG_HEIGHT 50
#define IMG2_WIDTH 30
#define IMG2_HEIGHT 20
static char *title="Window";
static char *text ="Program written in C language!";
//unsigned int img_len = (IMG_HEIGHT*IMG_WIDTH*sizeof(int));
static unsigned int img_len = (IMG_HEIGHT*IMG_WIDTH);
static unsigned int *p_img = NULL;
static unsigned int img2_len = (IMG2_HEIGHT*IMG2_WIDTH);
static unsigned int *p_img2 = NULL;
//void image_inject(int x, int y, int src_w, int src_h, void *src_img, int dst_w, int dst_h, void *dst_img);
//void image_inject(int x, int y, int src_w, int src_h, int *src_img, int dst_w, int dst_h, int *dst_img){
//int dst_offset = (dst_w * y) + x;
// for (unsigned int i = 0; i < 5; i++)
// {
// dst_img[dst_offset+i] = src_img[i];
// }
//}
void create_window(){
BeginDraw();
DrawWindow(100,100,400,200,title,0x80ffffff,0x13);
EndDraw();
Blit(p_img, 10, 30, 0, 0, IMG_WIDTH, IMG_HEIGHT, IMG_WIDTH, IMG_HEIGHT, 0);
Blit(p_img2, 10, 90, 0, 0, IMG2_WIDTH, IMG2_HEIGHT, IMG2_WIDTH, IMG2_HEIGHT, 0);
}
int main(int argc, char** argv[])
{
p_img = (unsigned int*)malloc(img_len*4);
if (p_img==NULL) exit (1);
p_img2 = (unsigned int*)malloc(img2_len*4);
if (p_img2==NULL) exit (1);
for (unsigned int i = 0; i < img_len; i++)
{
p_img[i] = 0x00ff0000;
}
for (unsigned int i = 0; i < img2_len; i++)
{
p_img2[i] = 0x00ffff00;
}
p_img[0] = 0x00ffff00;
p_img[1] = 0x00ffff00;
// image_inject(2, 2, IMG2_WIDTH, IMG2_HEIGHT, p_img2, IMG_WIDTH, IMG_HEIGHT, p_img);
create_window();
for (;;)
{
switch(get_os_event())
{
case 1:
create_window();
continue;
case 2:
get_key();
continue;
case 3:
// button pressed; we have only one button, close
if(get_os_button()==1) return 0;
continue;
}
}
}