bytesperline.c 617 B

12345678910111213141516171819202122232425262728293031323334
  1. #include <u.h>
  2. #include <libc.h>
  3. #include <draw.h>
  4. static
  5. int
  6. unitsperline(Rectangle r, int d, int bitsperunit)
  7. {
  8. ulong l, t;
  9. if(d <= 0 || d > 32) /* being called wrong. d is image depth. */
  10. abort();
  11. if(r.min.x >= 0){
  12. l = (r.max.x*d+bitsperunit-1)/bitsperunit;
  13. l -= (r.min.x*d)/bitsperunit;
  14. }else{ /* make positive before divide */
  15. t = (-r.min.x*d+bitsperunit-1)/bitsperunit;
  16. l = t+(r.max.x*d+bitsperunit-1)/bitsperunit;
  17. }
  18. return l;
  19. }
  20. int
  21. wordsperline(Rectangle r, int d)
  22. {
  23. return unitsperline(r, d, 8*sizeof(ulong));
  24. }
  25. int
  26. bytesperline(Rectangle r, int d)
  27. {
  28. return unitsperline(r, d, 8);
  29. }