PasjaGSM.pl
  Jesteś w: Forum > Przesówanie grafiki na minusową pozycję na osi Y...


Przesówanie grafiki na minusową pozycję na osi Y...

Forum.PasjaGSM.pl » ...:Sprzęt:... » Nokia » DCT-3 » [DCT3] Modyfikacje HW i SW » NokiX » Programowanie » Przesówanie grafiki na minusową pozycję na osi Y...
Poprzedni temat «» Następny temat
Autor Wiadomość
 
NoRiN 
Nowicjusz



Telefon: Nokia 3310
Operator: Plus
Wiek: 28
Dołączył: 22 Sty 2007
Posty: 11
Skąd: Warszawa
Wysłany: 2007-02-07, 12:54   Przesówanie grafiki na minusową pozycję na osi Y...

Witam.
Mam problem odnośnie przesuwania grafiki w pionie... Grafika wstawiona przez own_draw_bitmap(); nie może przyjąć wartości y mniejszej od zera (x z resztą też). Dla przykładu grafika o wys. 5 px umieszczona na poz. y=-1 znika cała. Chodzi mi o efekt aby wystawały 4 dolne piksele... Uznałem, że skoro nie da jej się na taką pozycję przesunąć to przed przesunięciem trzeba ją skrócić od góry o 1 rządek pixeli... Myślałem o podpatrzeniu czegoś w Breakerze (tam bonusy i cyfry są w jako 1 bitmapa) ale DruidBartek mi powiedział, że ucinanie w pionie różni się od ucinania w poziomie. Mówi, że wie jak to zrobić ale żebym wrzucił posta to może skorzysta więcej osób. Awięc wrzucam ;D
_________________
Tu był podpis, ale mi uciekł :/
^
 
 
     
AdSense


druidbartek 
Expert



Telefon: DCT-3
Operator: Era
Pomógł: 39 razy
Wiek: 31
Dołączył: 13 Wrz 2005
Posty: 1006
Skąd: Wrocław
Wysłany: 2007-02-07, 17:55   

bitmap1:
width - 16
height - 7
003E3E0A003C3E123C00363E08360000


w tym przypadku(height<=8) każdy bajt to jest kolejna linia.

bitmap2:
width - 14
height - 10
000CCEEEF6DEDEDEF6EECE0C0000 0000010101010101010101000000


tutaj mamy po 2 bajty na linie. dla bitmapy o wysokości 48px będzie to 6 bajtów.

więc "przycięcie" grafiki z lewej lub prawej strony jest stosunkowo proste

powiedzmy że przycinamy pierwsza grafikę o 2px z lewej i 4px z prawej otrzymując

bitmap3:
width - 10
height - 7
3E0A003C3E123C00363E


dla drugiej grafiki taka operacja będzie wyglądac następująco:

bitmap4:
width - 8
height - 10
CEEEF6DEDEDEF6EE 0101010101010101


dla przycięcia w pionie zaczyna się problem. pokaże na przykładzie

przycięcie bitmap1 o 2px z góry będzie wyglądac następująco

bitmap5:
width - 16
height - 5
000F0F02000F0F040F000D0F020D0000


skąd się to wzięło?
kolejne bajty należy przesunąć o 2 bity w prawo:
00>>2 == 00
3E>>2 == 0F
itd

bitmap6:
width - 16
height - 5
00F8F82800F0F848F000D8F820D80000


to samo tylko przesunięcie w lewo.


jednak dla grafiki o szerokości ponad 8px jak łatwo się domyśleć będzie to już dużo trudniejsze.

hmm trzeba się kiedyś bliżej temu przyjrzeć i napisać jaką funkcję która będzie nam rysować kawałek bitmapy czy coś


osobiście sam nei mam czasu na napisanie czegoś takiego ani nie czuje się na siłach.
jednak z tego co mówiłeś moge wywnioskować że te grafiki będą małe - skoro tak to powyższe informacje powinny w zupełności wystarczyć :)

[ Dodano: 2007-02-07, 17:56 ]
fak troche małe te grafiki - zaraz powiększe

[ Dodano: 2007-02-07, 18:07 ]
poprawione :)

[ Dodano: 2007-03-01, 14:00 ]
NoRiN napisał/a:
Mówi, że wie jak to zrobić ale żebym wrzucił posta to może skorzysta więcej osób.

no może ktoś to napisze hehe ;d

[ Dodano: 2007-03-01, 22:19 ]
hmm teraz tak pomyślałem że szkoda by się męczyć a może udało by się wykorzystać do tego już istniejącą draw_bitmap ?
jako parametr wymaga ona czegoś takiego
struct drawmap
{
struct bitmap *bitmap;
unsigned char left, top;
unsigned char unk0[4]; // 0 ?
unsigned char dmode;
unsigned char pad; // 0?
};

no właśnie - na cała strukturę aż 5 bajtów byc może jest nieużywane (znaczy coś tam niby jest dla tego unk0 ale bez tego powinno działać równie dobrze :d) - no i może udało by sie to jakoś wykorzystać trzeba nad tym jeszcze posiedzieć kiedy :)

[ Dodano: 2007-03-02, 21:03 ]
hmm być może uda się to rozwiązać nawet prościej - ale tylko do rysowania grafik "poza ekranem" - trzeba by lekko kod draw_bitmap zmodyfikować tak aby akceptowała ujemne pozycje - oczywiście to co by było poza lcd by pomijała a rysowała tylko to co się mieści. jeśli znajdę chwilkę (aa może ktoś inny? :d) na pogrzebanie we flashu to zobaczymy co z tego wyjdzie :)

[ Dodano: 2007-10-11, 16:54 ]
no i zagadka rozwiązana :)
system rysujący Nokii umożliwia nam rysowania "kawałka" grafiki :D
struktura drawmap wygląda mniej wiecej tak(będzie dostępna w inkludach):
Kod:
/* Structure: drawmap
   Structure describing a drawing map. For use with <draw_bitmap>. */
struct bitmap
{
   /* Field: data
      Pointer to bitmap structure. */
   struct bitmap *bitmap;
   /* Fields: left, top
      Coordinates of the top left corner of the bitmap in pixels. */
   unsigned char left, top;
   /* Fields: xoffs, yoffs
      Bitmap offset in pixels. */
   unsigned char xoffs, yoffs;
   /* Fields: width, height
      Width/height to display in pixels (0 means whole). */
   unsigned char width, height;
   /* Field: dmode
      <drawmode> */
   unsigned char dmode;
   unsigned char pad0;
};

jak widzimy możemy decydować jaki kawałek grafiki zamierzamy narysować - należy podac odpowiednie wartości dla xoffs,yoffs,width i height. DO użycia z funkcją draw_bitmap:
Kod:
/* Function: draw_bitmap
   Draws a drawmap.

   Parameters:
   darwmap - pointer to <drawmap> structure
*/
void draw_bitmap(const struct drawmap *drawmap);


nalezy pamiętać żeby suma odpowiednich wartości nie była większa od wysokości/szerokości grafiki czyli:
Kod:
xoffs+width<=szerokośc grafiki
yoffs+height<=wysokość grafiki


w innym przypadku grafiki zostanie narysowana w całości
to by było tyle :)
pozdrawiam
^
 
     
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Nie możesz ściągać załączników na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do: