forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   C++ (http://forum.boolean.name/forumdisplay.php?f=22)
-   -   не могу найти ошибку (http://forum.boolean.name/showthread.php?t=15072)

RegIon 06.07.2011 09:41

не могу найти ошибку
 
Код:

int LoadImage(loadimg img)
{
if(img.data==0) return 0;
int i,n;
uint16_t c,r1,b1,g1;
uint16_t out_w=img.width;
img.mask=0;
for(i=0;i<img.height;i++){
 for(n=0;n<img.width;n++){
    r1=img.data[((i*out_w)*3+n*3)];
    g1=img.data[((i*out_w)*3+n*3)+1];
    b1=img.data[((i*out_w)*3+n*3)+2];
    c=MAKE_RGB565(r1,g1,b1);
    img.data[i*img.width+n]=c;
}   
}
return 1;
}

int LoadAnimImage(loadimg img,uint16_t f_w,uint16_t f_h,uint16_t f_c)
{
  if(f_c==0)return 0;
  LoadImage(img);
  if(f_c>1){
  if(img.width>f_w-1){
  img.framecount=f_c;
  img.f_width=f_w;
  img.f_height=f_h;
  }
  }
  return 1;
}

void DrawImage(uint16_t *screen,int x,int y,loadimg img,uint16_t fram)
{
int i,n;
uint16_t c;
uint16_t img_w=img.width;
uint16_t img_h=img.height;
if(img.f_width>0 && img.f_height>0){
img_w=img.f_width;
img_h=img.f_height;
}
if(fram>img.framecount)fram=img.framecount;
for(i=0;i<img_h;i++){
 for(n=0;n<img_w;n++){
  c=img.data[fram*(img_w*img_h)+i*img_w+n];
  if(c!=img.mask)SetPixel(screen,x+i,y+n,c);
}   
}
}

void SetMask(loadimg img,uint16_t c)
{
img.mask=c;
}

функции пародии на блитз2д,гружу имгу так:if(LoadAnimImage(man,8,64,8 )==0)return 0;

пытаюсь рисовать так:DrawImage(screens,x,y,man,3);

но хоть сдохни,рисует полностью....где ошибка??
(пять минут назад 3G дали)

RegIon 06.07.2011 10:27

Ответ: не могу найти ошибку
 
Вложений: 1
как понять линкёр(так не билдит):
Вложение 14296
10просмотров и не одного ответа.....:super:

Morganolla 06.07.2011 11:12

Ответ: не могу найти ошибку
 
Интересно, где тебя так учили писать код, или ты самоучка?

RegIon 06.07.2011 11:16

Ответ: не могу найти ошибку
 
Цитата:

Интересно, где тебя так учили писать код, или ты самоучка?
ну точно не в школе(а и больше негде:-D).....:-Dпочти чистый код(даже лишних переменных нет)

RegIon 06.07.2011 11:21

Ответ: не могу найти ошибку
 
Цитата:

Сообщение от Костян (Сообщение 194538)
как понять линкёр(так не билдит):
Вложение 14296
10просмотров и не одного ответа.....:super:

эт я показал что при делении на 1 происходит...(из-за этого не смог ДрафЛине написать функцию)
..
тупой вопрос:как в масив(buff[320*240])в раз записать число?? без цикла..

Morganolla 06.07.2011 12:08

Ответ: не могу найти ошибку
 
Объявить его структурой... юнитом... , типом...и т.п....

Morganolla 06.07.2011 12:11

Ответ: не могу найти ошибку
 
Цитата:

Сообщение от Костян (Сообщение 194542)
ну точно не в школе(а и больше негде:-D).....:-Dпочти чистый код(даже лишних переменных нет)

Отвратительно отформатирован!

Mr_F_ 06.07.2011 13:11

Ответ: не могу найти ошибку
 
Цитата:

как в масив(buff[320*240])в раз записать число??
массив чего?
можно в принципе без цикла - поюзав ZeroMemory из винапи (хотя очевидно внутри будет подобие цикла + не portable).

den 06.07.2011 13:33

Ответ: не могу найти ошибку
 
можно fill из std
но там тоже цикл
portable

RegIon 06.07.2011 13:39

Ответ: не могу найти ошибку
 
Цитата:

массив чего?
можно в принципе без цикла - поюзав ZeroMemory из винапи (хотя очевидно внутри будет подобие цикла + не portable).
масив unsigned shote(uint16_t)..винапи не могу-portable(spmp8000)
очищаю так
Код:

void cls(uint16_t* screens,uint16_t c){
int i;
for(i=0;i<video_img.width * video_img.height;i++) screens[i]=c;
//тут лучше так,меньше проходов нужно.
//screens=c;
}

причем в реалтиме...не накладно??
..
дак как DrawImage сделать НОРМАЛЬНО?

wolfhound512 06.07.2011 13:51

Ответ: не могу найти ошибку
 
можно попробовать wmemset(), wchar_t и short одного размера.

RegIon 06.07.2011 13:59

Ответ: не могу найти ошибку
 
Код:

можно попробовать wmemset(), wchar_t и short одного размера.
хм,ну наверно опять линкер выпендриваться бутит,так же как и memcopy..

HolyDel 07.07.2011 02:28

Ответ: не могу найти ошибку
 
Цитата:

wchar_t и short одного размера.
это кто вам такое в ухо пернул? если на вашей системе и с вашим компилятором размеры совпадают - то ето еще не значит что sizeof(short) == sizeof(wchar_t) по стандарту. на unix-подобных системах не совпадает точно.

RegIon 07.07.2011 05:46

Ответ: не могу найти ошибку
 
Цитата:


wchar_t и short одного размера.
это кто вам такое в ухо пернул? если на вашей системе и с вашим компилятором размеры совпадают - то ето еще не значит что sizeof(short) == sizeof(wchar_t) по стандарту. на unix-подобных системах не совпадает точно.
ну знач и у меня не проконает...у меня ОС на unix скриптах собрана(там даже аудио кодеки от Linex)
и у меня пиксель-буфер,а макc цвет oxffff,мне char никак не катит,тока shote,и причем unsigned()
...ну раз вы все умные,а я не очень,задача:
массив char :
Код:

char img[64*64*3]={
25,0,255,230,0,255,......

и так далее,в нём записан каждый цвет RGB.Надо его переформировать в массив:
Код:

uint16_t buff[64*64][frame]
typedef unsigned short uint16_t

есть такие данные:
размер имги=width,height
размер фрейма=f_width,f_height
количество фреймов=count
//проще потом рисовать
а,преобразователь цвета с=MAKE_RGB565(r,g,b)

RegIon 07.07.2011 10:01

Ответ: не могу найти ошибку
 
переименуйте тему в "Пишем свой 2d двиг"
написал функцию таилинга:
Код:

void TileImage(uint16_t *buff,loadimg img,int x,int y,uint16_t width,uint16_t height)
{
uint16_t i,n,w_c,h_c;
w_c=img.width/width;
h_c=img.height/height;

  for(i=0;i<w_c;i++){
      for(n=0;n<h_c;n++){
       
          DrawImage(buff,img,x+img.width*i,y+img.width*n); 
   
      }
  }
}

тока будет в настоящий размер,если размер области тайлинга будет цело кратен размеру имаги,а то либо нехватать будет,либо много наоборот...
....


Часовой пояс GMT +4, время: 06:52.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot