rfreeimage 0.2.1 → 0.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/ext/rfreeimage/rfi_main.c +187 -0
- data/lib/rfreeimage/version.rb +1 -1
- metadata +2 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: c9c9e8cdd384482e5a8231dcbf76f2eef0c5abb0
         | 
| 4 | 
            +
              data.tar.gz: 3a007f7207ac6b4ab4bc70cf165e67426883e541
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: f6511c5393c22018e14436d651a5b8d310eb82450553515d60e53ce5b9e0aa97123131a3a3df5c38235dcdebdbb56f5683dc5d2d7ecb746284b2d52cba1535e0
         | 
| 7 | 
            +
              data.tar.gz: a6664341d28ffb484e1922376d79592801e912b25e88c0ec8842301d37c445150ca300a80a37d30eb418e11d1891455f30c21ba0e02edfc62ac6b6c086734d45
         | 
    
        data/ext/rfreeimage/rfi_main.c
    CHANGED
    
    | @@ -25,6 +25,24 @@ static void try_sort(int *x, int *y) | |
| 25 25 | 
             
            	}
         | 
| 26 26 | 
             
            }
         | 
| 27 27 |  | 
| 28 | 
            +
            static int min_of_arrary(int x1, int x2, int x3, int x4)
         | 
| 29 | 
            +
            {
         | 
| 30 | 
            +
            	int m = x1;
         | 
| 31 | 
            +
            	if(x2 < m) m = x2;
         | 
| 32 | 
            +
            	if(x3 < m) m = x3;
         | 
| 33 | 
            +
            	if(x4 < m) m = x4;
         | 
| 34 | 
            +
            	return m;
         | 
| 35 | 
            +
            }
         | 
| 36 | 
            +
             | 
| 37 | 
            +
            static int max_of_arrary(int x1, int x2, int x3, int x4)
         | 
| 38 | 
            +
            {
         | 
| 39 | 
            +
            	int m = x1;
         | 
| 40 | 
            +
            	if(x2 > m) m = x2;
         | 
| 41 | 
            +
            	if(x3 > m) m = x3;
         | 
| 42 | 
            +
            	if(x4 > m) m = x4;
         | 
| 43 | 
            +
            	return m;
         | 
| 44 | 
            +
            }
         | 
| 45 | 
            +
             | 
| 28 46 | 
             
            static VALUE rb_rfi_version(VALUE self)
         | 
| 29 47 | 
             
            {
         | 
| 30 48 | 
             
            	return rb_ary_new3(3, INT2NUM(FREEIMAGE_MAJOR_VERSION),
         | 
| @@ -48,6 +66,67 @@ struct native_image { | |
| 48 66 | 
             
            	FIBITMAP *handle;
         | 
| 49 67 | 
             
            };
         | 
| 50 68 |  | 
| 69 | 
            +
            static void dd_line(struct native_image* img, int x0, int y0,
         | 
| 70 | 
            +
            		int x1,int y1,
         | 
| 71 | 
            +
            		unsigned int bgra, int size)
         | 
| 72 | 
            +
            {
         | 
| 73 | 
            +
            	float x, dx, dy, y, k, deta, threshold=0.0001;
         | 
| 74 | 
            +
            	int hs = size / 2, i;
         | 
| 75 | 
            +
             | 
| 76 | 
            +
            	dx = x1-x0;
         | 
| 77 | 
            +
            	dy = y1-y0;
         | 
| 78 | 
            +
             | 
| 79 | 
            +
            	if(dx < threshold && dx > -threshold){
         | 
| 80 | 
            +
            		k = 0.0;
         | 
| 81 | 
            +
            	}
         | 
| 82 | 
            +
            	else
         | 
| 83 | 
            +
            	{
         | 
| 84 | 
            +
            		k=dy * 1.0 / dx;
         | 
| 85 | 
            +
            	}
         | 
| 86 | 
            +
             | 
| 87 | 
            +
            	if(dx > threshold)
         | 
| 88 | 
            +
            	{
         | 
| 89 | 
            +
            		deta = k > 1 ? 1.0 / k : 1;
         | 
| 90 | 
            +
            		for(i = -hs; i <= hs; i++) {
         | 
| 91 | 
            +
            			y = y0;
         | 
| 92 | 
            +
            			for (x = x0; x <= x1; x += deta){
         | 
| 93 | 
            +
            				FreeImage_SetPixelColor(img->handle, x + i, img->h - (y + i) - 1 , (RGBQUAD*)&bgra);
         | 
| 94 | 
            +
            				y = y + k * deta;
         | 
| 95 | 
            +
            			}
         | 
| 96 | 
            +
            		}
         | 
| 97 | 
            +
            	}
         | 
| 98 | 
            +
            	else if(dx < -threshold)
         | 
| 99 | 
            +
            	{
         | 
| 100 | 
            +
            		deta = k > 1 ? 1.0 / k : 1;
         | 
| 101 | 
            +
            		for(i = -hs; i <= hs; i++) {
         | 
| 102 | 
            +
            			y = y0;
         | 
| 103 | 
            +
            			for (x = x0; x >= x1; x -= deta){
         | 
| 104 | 
            +
            				FreeImage_SetPixelColor(img->handle, x + i, img->h - (y + i) - 1, (RGBQUAD*)&bgra);
         | 
| 105 | 
            +
            				y = y - k * deta;
         | 
| 106 | 
            +
            			}
         | 
| 107 | 
            +
            		}
         | 
| 108 | 
            +
            	}
         | 
| 109 | 
            +
            	else
         | 
| 110 | 
            +
            	{
         | 
| 111 | 
            +
            		if(dy >= 0)
         | 
| 112 | 
            +
            		{
         | 
| 113 | 
            +
            			for(i = -hs; i <= hs; i++) {
         | 
| 114 | 
            +
            				for (y = y0; y <= y1; y++){
         | 
| 115 | 
            +
            					FreeImage_SetPixelColor(img->handle, x0 + i, img->h - (y + i) - 1, (RGBQUAD*)&bgra);
         | 
| 116 | 
            +
            				}
         | 
| 117 | 
            +
            			}
         | 
| 118 | 
            +
            		}
         | 
| 119 | 
            +
            		else
         | 
| 120 | 
            +
            		{
         | 
| 121 | 
            +
            			for(i = -hs; i <= hs; i++) {
         | 
| 122 | 
            +
            				for (y = y0; y >= y1; y--){
         | 
| 123 | 
            +
            					FreeImage_SetPixelColor(img->handle, x0 + i, img->h - (y + i) - 1, (RGBQUAD*)&bgra);
         | 
| 124 | 
            +
            				}
         | 
| 125 | 
            +
            			}
         | 
| 126 | 
            +
            		}
         | 
| 127 | 
            +
            	}
         | 
| 128 | 
            +
            }
         | 
| 129 | 
            +
             | 
| 51 130 | 
             
            static void Image_free(struct native_image* img)
         | 
| 52 131 | 
             
            {
         | 
| 53 132 | 
             
            	if(!img)
         | 
| @@ -673,6 +752,27 @@ static VALUE Image_draw_point(VALUE self, VALUE _x, VALUE _y, VALUE color, VALUE | |
| 673 752 | 
             
            	return self;
         | 
| 674 753 | 
             
            }
         | 
| 675 754 |  | 
| 755 | 
            +
            static VALUE Image_draw_line(VALUE self, VALUE _x1, VALUE _y1,
         | 
| 756 | 
            +
            		VALUE _x2, VALUE _y2, 
         | 
| 757 | 
            +
            		VALUE color, VALUE _size)
         | 
| 758 | 
            +
            {
         | 
| 759 | 
            +
            	struct native_image* img;
         | 
| 760 | 
            +
            	int x1 = NUM2INT(_x1);
         | 
| 761 | 
            +
            	int y1 = NUM2INT(_y1);
         | 
| 762 | 
            +
            	int x2 = NUM2INT(_x2);
         | 
| 763 | 
            +
            	int y2 = NUM2INT(_y2);
         | 
| 764 | 
            +
            	int size = NUM2INT(_size);
         | 
| 765 | 
            +
            	unsigned int bgra = NUM2UINT(color);
         | 
| 766 | 
            +
            	if (size < 0)
         | 
| 767 | 
            +
            		rb_raise(rb_eArgError, "Invalid point size: %d", size);
         | 
| 768 | 
            +
            	Data_Get_Struct(self, struct native_image, img);
         | 
| 769 | 
            +
            	RFI_CHECK_IMG(img);
         | 
| 770 | 
            +
             | 
| 771 | 
            +
            	dd_line(img, x1, y1, x2, y2, bgra, size);
         | 
| 772 | 
            +
             | 
| 773 | 
            +
            	return self;
         | 
| 774 | 
            +
            }
         | 
| 775 | 
            +
             | 
| 676 776 | 
             
            static VALUE Image_draw_rectangle(VALUE self, VALUE _x1, VALUE _y1,
         | 
| 677 777 | 
             
            		VALUE _x2, VALUE _y2,
         | 
| 678 778 | 
             
            		VALUE color, VALUE _width)
         | 
| @@ -710,6 +810,40 @@ static VALUE Image_draw_rectangle(VALUE self, VALUE _x1, VALUE _y1, | |
| 710 810 | 
             
            	return self;
         | 
| 711 811 | 
             
            }
         | 
| 712 812 |  | 
| 813 | 
            +
            /*
         | 
| 814 | 
            +
            daw arbitrari quadrangle
         | 
| 815 | 
            +
            four point is given clockwise ordered
         | 
| 816 | 
            +
            */
         | 
| 817 | 
            +
            static VALUE Image_draw_quadrangle(VALUE self, VALUE _x1, VALUE _y1,
         | 
| 818 | 
            +
            		VALUE _x2, VALUE _y2,
         | 
| 819 | 
            +
            		VALUE _x3, VALUE _y3,
         | 
| 820 | 
            +
            		VALUE _x4, VALUE _y4,
         | 
| 821 | 
            +
            		VALUE color, VALUE _width)
         | 
| 822 | 
            +
            {
         | 
| 823 | 
            +
            	struct native_image* img;
         | 
| 824 | 
            +
            	int x1 = NUM2INT(_x1);
         | 
| 825 | 
            +
            	int y1 = NUM2INT(_y1);
         | 
| 826 | 
            +
            	int x2 = NUM2INT(_x2);
         | 
| 827 | 
            +
            	int y2 = NUM2INT(_y2);
         | 
| 828 | 
            +
            	int x3 = NUM2INT(_x3);
         | 
| 829 | 
            +
            	int y3 = NUM2INT(_y3);
         | 
| 830 | 
            +
            	int x4 = NUM2INT(_x4);
         | 
| 831 | 
            +
            	int y4 = NUM2INT(_y4);
         | 
| 832 | 
            +
            	int size = NUM2INT(_width);
         | 
| 833 | 
            +
            	unsigned int bgra = NUM2UINT(color);
         | 
| 834 | 
            +
            	if (size < 0)
         | 
| 835 | 
            +
            		rb_raise(rb_eArgError, "Invalid line width: %d", size);
         | 
| 836 | 
            +
            	Data_Get_Struct(self, struct native_image, img);
         | 
| 837 | 
            +
            	RFI_CHECK_IMG(img);
         | 
| 838 | 
            +
             | 
| 839 | 
            +
            	dd_line(img, x1, y1, x2, y2, bgra, size);
         | 
| 840 | 
            +
            	dd_line(img, x2, y2, x3, y3, bgra, size);
         | 
| 841 | 
            +
            	dd_line(img, x3, y3, x4, y4, bgra, size);
         | 
| 842 | 
            +
            	dd_line(img, x4, y4, x1, y1, bgra, size);
         | 
| 843 | 
            +
             | 
| 844 | 
            +
            	return self;
         | 
| 845 | 
            +
            }
         | 
| 846 | 
            +
             | 
| 713 847 | 
             
            static VALUE Image_fill_rectangle(VALUE self, VALUE _x1, VALUE _y1,
         | 
| 714 848 | 
             
            		VALUE _x2, VALUE _y2,
         | 
| 715 849 | 
             
            		VALUE color)
         | 
| @@ -737,6 +871,56 @@ static VALUE Image_fill_rectangle(VALUE self, VALUE _x1, VALUE _y1, | |
| 737 871 | 
             
            	return self;
         | 
| 738 872 | 
             
            }
         | 
| 739 873 |  | 
| 874 | 
            +
            /*
         | 
| 875 | 
            +
            daw arbitrari quadrangle
         | 
| 876 | 
            +
            four point is given clockwise ordered
         | 
| 877 | 
            +
            */
         | 
| 878 | 
            +
            static VALUE Image_fill_quadrangle(VALUE self, VALUE _x1, VALUE _y1,
         | 
| 879 | 
            +
            		VALUE _x2, VALUE _y2,
         | 
| 880 | 
            +
            		VALUE _x3, VALUE _y3,
         | 
| 881 | 
            +
            		VALUE _x4, VALUE _y4,
         | 
| 882 | 
            +
            		VALUE color)
         | 
| 883 | 
            +
            {
         | 
| 884 | 
            +
            	struct native_image* img;
         | 
| 885 | 
            +
            	int x1 = NUM2INT(_x1);
         | 
| 886 | 
            +
            	int y1 = NUM2INT(_y1);
         | 
| 887 | 
            +
            	int x2 = NUM2INT(_x2);
         | 
| 888 | 
            +
            	int y2 = NUM2INT(_y2);
         | 
| 889 | 
            +
            	int x3 = NUM2INT(_x3);
         | 
| 890 | 
            +
            	int y3 = NUM2INT(_y3);
         | 
| 891 | 
            +
            	int x4 = NUM2INT(_x4);
         | 
| 892 | 
            +
            	int y4 = NUM2INT(_y4);
         | 
| 893 | 
            +
            	unsigned int bgra = NUM2UINT(color);
         | 
| 894 | 
            +
             | 
| 895 | 
            +
            	int d1, d2, d3, d4;
         | 
| 896 | 
            +
            	int x,y;
         | 
| 897 | 
            +
            	int minx, miny, maxx, maxy;
         | 
| 898 | 
            +
             | 
| 899 | 
            +
            	Data_Get_Struct(self, struct native_image, img);
         | 
| 900 | 
            +
            	RFI_CHECK_IMG(img);
         | 
| 901 | 
            +
             | 
| 902 | 
            +
            	minx = min_of_arrary(x1,x2,x3,x4);
         | 
| 903 | 
            +
            	maxx = max_of_arrary(x1,x2,x3,x4);
         | 
| 904 | 
            +
            	miny = min_of_arrary(y1,y2,y3,y4);
         | 
| 905 | 
            +
            	maxy = max_of_arrary(y1,y2,y3,y4);
         | 
| 906 | 
            +
             | 
| 907 | 
            +
            	for(x = minx; x <= maxx; x++) {
         | 
| 908 | 
            +
            		for(y = miny; y <= maxy; y++) {
         | 
| 909 | 
            +
            			//if inner
         | 
| 910 | 
            +
            			d1 = (x2 - x1) * (y - y1) - (y2 - y1) * (x - x1);
         | 
| 911 | 
            +
            			d2 = (x3 - x2) * (y - y2) - (y3 - y2) * (x - x2);
         | 
| 912 | 
            +
            			d3 = (x4 - x3) * (y - y3) - (y4 - y3) * (x - x3);
         | 
| 913 | 
            +
            			d4 = (x1 - x4) * (y - y4) - (y1 - y4) * (x - x4);
         | 
| 914 | 
            +
             | 
| 915 | 
            +
            			if((d1 > 0 && d2 > 0 && d3 >0 && d4 >0) || (d1 < 0 && d2 < 0 && d3 < 0 && d4 <0))
         | 
| 916 | 
            +
            			{
         | 
| 917 | 
            +
            				FreeImage_SetPixelColor(img->handle, x, img->h - y, (RGBQUAD*)&bgra);
         | 
| 918 | 
            +
            			}
         | 
| 919 | 
            +
            		}
         | 
| 920 | 
            +
            	}
         | 
| 921 | 
            +
             | 
| 922 | 
            +
            	return self;
         | 
| 923 | 
            +
            }
         | 
| 740 924 |  | 
| 741 925 | 
             
            void Init_rfreeimage(void)
         | 
| 742 926 | 
             
            {
         | 
| @@ -772,8 +956,11 @@ void Init_rfreeimage(void) | |
| 772 956 |  | 
| 773 957 | 
             
            	/* draw */
         | 
| 774 958 | 
             
            	rb_define_method(Class_Image, "draw_point", Image_draw_point, 4);
         | 
| 959 | 
            +
            	rb_define_method(Class_Image, "draw_line", Image_draw_line, 4 + 2);
         | 
| 775 960 | 
             
            	rb_define_method(Class_Image, "draw_rectangle", Image_draw_rectangle, 4 + 2);
         | 
| 961 | 
            +
            	rb_define_method(Class_Image, "draw_quadrangle", Image_draw_quadrangle, 8 + 2);
         | 
| 776 962 | 
             
            	rb_define_method(Class_Image, "fill_rectangle", Image_fill_rectangle, 4 + 1);
         | 
| 963 | 
            +
            	rb_define_method(Class_Image, "fill_quadrangle", Image_fill_quadrangle, 8 + 1);
         | 
| 777 964 |  | 
| 778 965 | 
             
            	rb_define_singleton_method(Class_Image, "ping", Image_ping, 1);
         | 
| 779 966 | 
             
            	rb_define_singleton_method(Class_Image, "from_blob", Image_from_blob, -1);
         | 
    
        data/lib/rfreeimage/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: rfreeimage
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.2. | 
| 4 | 
            +
              version: 0.2.4
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Yuheng Chen
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2018-04- | 
| 11 | 
            +
            date: 2018-04-19 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: rake-compiler
         |