* Using PNG_IO to create a file. @ 2003-10-02 23:54 Ron Baldwin 2003-10-03 2:54 ` Jeff C, 0 siblings, 1 reply; 4+ messages in thread From: Ron Baldwin @ 2003-10-02 23:54 UTC (permalink / raw) I need to read .PNG format graphics images from a file, process the image as a two-dimensional array, then write the processed image out to a new file. I have used the PNG_IO package to read data from files, but I can't figure out how to get the data from a two-dimensional array to the Write_PNG_Type_? output procedures. Does anyone have some examples of such an operation? Thanks in advance. ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: Using PNG_IO to create a file. 2003-10-02 23:54 Using PNG_IO to create a file Ron Baldwin @ 2003-10-03 2:54 ` Jeff C, 2003-10-11 0:10 ` Ron Baldwin 0 siblings, 1 reply; 4+ messages in thread From: Jeff C, @ 2003-10-03 2:54 UTC (permalink / raw) "Ron Baldwin" <re(nospam)baldwin@adelphia.net> wrote in message news:bV2fb.1204$qj6.1035959@news1.news.adelphia.net... > I need to read .PNG format graphics images from a file, process the image as > a two-dimensional array, then write the processed image out to a new file. > > I have used the PNG_IO package to read data from files, but I can't figure > out how to get the data from a two-dimensional array to the Write_PNG_Type_? > output procedures. > > Does anyone have some examples of such an operation? There is an example in the png_test.adb file that ships with png_io. You just need to instantiate one of the Write_PNG_Type_X procedures with the appropriate parameters. Now I suspect you looked at this a little already so I am probably telling you things you already know. Lets look at an example. The spec for one of the procedures is generic type Image_Handle is limited private; type Sample is range <>; with function Grey_Sample(I : Image_Handle; R, C : Coordinate) return Sample; procedure Write_PNG_Type_0(Filename : in String; I : in Image_Handle; X, Y : in Dimension; Bit_Depth : in Depth := Eight; Interlace : in Boolean := False; Ancillary : in Chunk_List := Null_Chunk_List); This is for a greyscale image which of course is the simplest case...So you need to write a function that takes in three parameter types. One should be the type of your 2d array, the other two are the index values to the array and finally the function should return the value at the row and column passed to it. So, for example assume you created a 2-d array like type My_Pixel_Type is range 0 .. 100; type Cool_Picture_Type is array (Coordinate range 0 .. 9, Coordinate range 0 .. 19) of My_Pixel_Type; and you had a variable Picture : Cool_Picture_Type that you had read your data into you need to write function Get_Picture_Pixel(From_Array : in Cool_Picture_Type; Row, Column : in Coordinate) return Natural; and simply implement it as function Get_Picture_Pixel(From_Array : in Cool_Picture_Type; Row, Column : in Coordinate) return Natural is begin return From_Array(Row, Column); end Get_Picture_Pixel; To create a write procedure that uses your function you would do procedure Write_Cool_Picture is new Write_PNG_Type_0 (Image_Handle => Cool_Picture_Type; Sample => My_Pixel_Type, Grey_Sample => Get_Picture_Pixel); You could then use the new procedure you created to write a file containing the data from the Picture by doing Write_Cool_Picture(Filename => "adarules.png", I => Picture, X => Picture'length(2), Y => Picture'length(1)); And that's it. Now obviously the stuff above is not in the order to feed to a compiler. Quite possibly I goofed on a few syntax elements and/or swaped rows and columns someplace.... But since this seemed more like a basic programming question that is somewhat answered by the code I hoped that presenting it in this format would be more useful than yet another example like in the test driver. ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: Using PNG_IO to create a file. 2003-10-03 2:54 ` Jeff C, @ 2003-10-11 0:10 ` Ron Baldwin 2003-10-11 10:50 ` Ron Baldwin 0 siblings, 1 reply; 4+ messages in thread From: Ron Baldwin @ 2003-10-11 0:10 UTC (permalink / raw) When I set thiings up this way, the compiler complains that no visible subprogram matches the definition for grey_sample because it is defined to return type "sample" instead of Natural. On Fri, 03 Oct 2003 02:54:45 GMT, "Jeff C," <nolongersafeto@userealemailsniff.com> wrote: > >"Ron Baldwin" <re(nospam)baldwin@adelphia.net> wrote in message >news:bV2fb.1204$qj6.1035959@news1.news.adelphia.net... >> I need to read .PNG format graphics images from a file, process the image >as >> a two-dimensional array, then write the processed image out to a new >file. >> >> I have used the PNG_IO package to read data from files, but I can't figure >> out how to get the data from a two-dimensional array to the >Write_PNG_Type_? >> output procedures. >> >> Does anyone have some examples of such an operation? > > >There is an example in the png_test.adb file that ships with png_io. > > >You just need to instantiate one of the Write_PNG_Type_X procedures with the >appropriate >parameters. > >Now I suspect you looked at this a little already so I am probably telling >you things you already know. > >Lets look at an example. The spec for one of the procedures is > > generic > type Image_Handle is limited private; > type Sample is range <>; > with function Grey_Sample(I : Image_Handle; > R, C : Coordinate) return Sample; > procedure Write_PNG_Type_0(Filename : in String; > I : in Image_Handle; > X, Y : in Dimension; > Bit_Depth : in Depth := Eight; > Interlace : in Boolean := False; > Ancillary : in Chunk_List := Null_Chunk_List); > >This is for a greyscale image which of course is the simplest case...So you >need to write a function that takes in >three parameter types. One should be the type of your 2d array, the other >two are the index values to the array and finally the function should return >the value at the row and column passed to it. > >So, for example assume you created a 2-d array like > > type My_Pixel_Type is range 0 .. 100; > > type Cool_Picture_Type is array (Coordinate range 0 .. 9, Coordinate >range 0 .. 19) of My_Pixel_Type; > > and you had a variable > Picture : Cool_Picture_Type > > that you had read your data into > > you need to write > > function Get_Picture_Pixel(From_Array : in Cool_Picture_Type; > Row, Column : in Coordinate) >return Natural; > > and simply implement it as > > > function Get_Picture_Pixel(From_Array : in Cool_Picture_Type; > Row, Column : in Coordinate) >return Natural is > > begin > return From_Array(Row, Column); > end Get_Picture_Pixel; > > > >To create a write procedure that uses your function you would do > > procedure Write_Cool_Picture is new Write_PNG_Type_0 > (Image_Handle => Cool_Picture_Type; > Sample => My_Pixel_Type, > Grey_Sample => Get_Picture_Pixel); > > > > You could then use the new procedure you created to write a file >containing the data from the Picture by doing > > Write_Cool_Picture(Filename => "adarules.png", > I => Picture, > X => Picture'length(2), > Y => Picture'length(1)); > > >And that's it. > > >Now obviously the stuff above is not in the order to feed to a compiler. >Quite possibly I goofed on a few >syntax elements and/or swaped rows and columns someplace.... > >But since this seemed more like a basic programming question that is >somewhat answered by the code I hoped >that presenting it in this format would be more useful than yet another >example like in the test driver. > ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: Using PNG_IO to create a file. 2003-10-11 0:10 ` Ron Baldwin @ 2003-10-11 10:50 ` Ron Baldwin 0 siblings, 0 replies; 4+ messages in thread From: Ron Baldwin @ 2003-10-11 10:50 UTC (permalink / raw) Oops, I found my error in defining types. It works fine now. Thanks for your help. On Sat, 11 Oct 2003 00:10:09 GMT, Ron Baldwin <no-spam-rebaldwin@adelphia.net> wrote: >When I set thiings up this way, the compiler complains that no visible >subprogram matches the definition for grey_sample because it is >defined to return type "sample" instead of Natural. > >On Fri, 03 Oct 2003 02:54:45 GMT, "Jeff C," ><nolongersafeto@userealemailsniff.com> wrote: > >> >>"Ron Baldwin" <re(nospam)baldwin@adelphia.net> wrote in message >>news:bV2fb.1204$qj6.1035959@news1.news.adelphia.net... >>> I need to read .PNG format graphics images from a file, process the image >>as >>> a two-dimensional array, then write the processed image out to a new >>file. >>> >>> I have used the PNG_IO package to read data from files, but I can't figure >>> out how to get the data from a two-dimensional array to the >>Write_PNG_Type_? >>> output procedures. >>> >>> Does anyone have some examples of such an operation? >> >> >>There is an example in the png_test.adb file that ships with png_io. >> >> >>You just need to instantiate one of the Write_PNG_Type_X procedures with the >>appropriate >>parameters. >> >>Now I suspect you looked at this a little already so I am probably telling >>you things you already know. >> >>Lets look at an example. The spec for one of the procedures is >> >> generic >> type Image_Handle is limited private; >> type Sample is range <>; >> with function Grey_Sample(I : Image_Handle; >> R, C : Coordinate) return Sample; >> procedure Write_PNG_Type_0(Filename : in String; >> I : in Image_Handle; >> X, Y : in Dimension; >> Bit_Depth : in Depth := Eight; >> Interlace : in Boolean := False; >> Ancillary : in Chunk_List := Null_Chunk_List); >> >>This is for a greyscale image which of course is the simplest case...So you >>need to write a function that takes in >>three parameter types. One should be the type of your 2d array, the other >>two are the index values to the array and finally the function should return >>the value at the row and column passed to it. >> >>So, for example assume you created a 2-d array like >> >> type My_Pixel_Type is range 0 .. 100; >> >> type Cool_Picture_Type is array (Coordinate range 0 .. 9, Coordinate >>range 0 .. 19) of My_Pixel_Type; >> >> and you had a variable >> Picture : Cool_Picture_Type >> >> that you had read your data into >> >> you need to write >> >> function Get_Picture_Pixel(From_Array : in Cool_Picture_Type; >> Row, Column : in Coordinate) >>return Natural; >> >> and simply implement it as >> >> >> function Get_Picture_Pixel(From_Array : in Cool_Picture_Type; >> Row, Column : in Coordinate) >>return Natural is >> >> begin >> return From_Array(Row, Column); >> end Get_Picture_Pixel; >> >> >> >>To create a write procedure that uses your function you would do >> >> procedure Write_Cool_Picture is new Write_PNG_Type_0 >> (Image_Handle => Cool_Picture_Type; >> Sample => My_Pixel_Type, >> Grey_Sample => Get_Picture_Pixel); >> >> >> >> You could then use the new procedure you created to write a file >>containing the data from the Picture by doing >> >> Write_Cool_Picture(Filename => "adarules.png", >> I => Picture, >> X => Picture'length(2), >> Y => Picture'length(1)); >> >> >>And that's it. >> >> >>Now obviously the stuff above is not in the order to feed to a compiler. >>Quite possibly I goofed on a few >>syntax elements and/or swaped rows and columns someplace.... >> >>But since this seemed more like a basic programming question that is >>somewhat answered by the code I hoped >>that presenting it in this format would be more useful than yet another >>example like in the test driver. >> ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2003-10-11 10:50 UTC | newest] Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2003-10-02 23:54 Using PNG_IO to create a file Ron Baldwin 2003-10-03 2:54 ` Jeff C, 2003-10-11 0:10 ` Ron Baldwin 2003-10-11 10:50 ` Ron Baldwin
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox