kopia lustrzana https://gitlab.com/sane-project/website
155 wiersze
7.0 KiB
HTML
155 wiersze
7.0 KiB
HTML
|
<html><body>
|
||
|
<a href="doc009.html"><img src=../icons/next.gif alt="Next"></a>
|
||
|
<a href="doc000.html"><img src=../icons/up.gif alt="Up"></a>
|
||
|
<a href="doc007.html"><img src=../icons/previous.gif alt="Previous"></a>
|
||
|
<a href="doc000.html"><img src=../icons/contents.gif alt="Contents"></a>
|
||
|
<a href="doc019.html"><img src=../icons/index.gif alt="Index"></a>
|
||
|
<hr>
|
||
|
|
||
|
<title>Image Data Format</title>
|
||
|
<h2><a name="s3.2">3.2 Image Data Format</a></h2><a name="i0">
|
||
|
|
||
|
<p>Arguably the most important aspect of an image acquisition system is
|
||
|
how images are represented. The SANE approach is to define a simple
|
||
|
yet powerful representation that is sufficient for vast majority of
|
||
|
applications and devices. While the representation is simple, the
|
||
|
interface has been defined carefully to allow extending it in the
|
||
|
future without breaking backwards compatibility. Thus, it will be
|
||
|
possible to accommodate future applications or devices that were not
|
||
|
anticipated at the time this standard was created.
|
||
|
|
||
|
<p>A SANE image is a rectangular area. The rectangular area is
|
||
|
subdivided into a number of rows and columns. At the intersection of
|
||
|
each row and column is a quadratic pixel. A pixel consists of one or
|
||
|
more sample values. Each sample value represents one channel (e.g.,
|
||
|
the red channel). Each sample value has a certain bit depth. The bit
|
||
|
depth is fixed for the entire image and can be as small as one bit.
|
||
|
Valid bit depths are 1, 8, or 16 bits per sample. If a device's
|
||
|
natural bit depth is something else, it is up to the driver to scale
|
||
|
the sample values appropriately (e.g., a 4 bit sample could be scaled
|
||
|
by a factor of four to represent a sample value of depth 8).
|
||
|
|
||
|
<p><h3><a name="s3.2.1">3.2.1 Image Transmission</a></h3>
|
||
|
|
||
|
<p>The SANE API transmits an image as a sequence of frames. Each frame
|
||
|
covers the same rectangular area as the entire image, but may contain
|
||
|
only a subset of the channels in the final image. For example, a
|
||
|
red/green/blue image could either be transmitted as a single frame
|
||
|
that contains the sample values for all three channels or it could be
|
||
|
transmitted as a sequence of three frames: the first frame containing
|
||
|
the red channel, the second the green channel, and the third the blue
|
||
|
channel.
|
||
|
|
||
|
<p>Conceptually, each frame is transmitted a byte at a time. Each byte
|
||
|
may contain 8 sample values (for an image bit depth of 1), one full
|
||
|
sample value (for an image bit depth of 8), or a partial sample value
|
||
|
(for an image bit depth of 16 or bigger). In the latter case, the
|
||
|
bytes of each sample value are transmitted in the machine's native
|
||
|
byte order. For depth 1, the leftmost pixel is stored in the most
|
||
|
significant bit, and the rightmost pixel in the least significant bit.
|
||
|
<blockquote>
|
||
|
<center>
|
||
|
<b>Backend Implementation Note</b>
|
||
|
</center>
|
||
|
A network-based meta backend will have to ensure that the byte order
|
||
|
in image data is adjusted appropriately if necessary. For example,
|
||
|
when the meta backend attaches to the server proxy, the proxy may
|
||
|
inform the backend of the server's byte order. The backend can then
|
||
|
apply the adjustment if necessary. In essence, this implements a
|
||
|
``receiver-makes-right'' approach.
|
||
|
</blockquote>
|
||
|
|
||
|
<p><p><a name="f2"></a>
|
||
|
<center>
|
||
|
|
||
|
<img width=390 height=196 src="img001.gif">
|
||
|
<p><center>Figure 2: Transfer order of image data bytes</center>
|
||
|
|
||
|
</center>
|
||
|
<p>
|
||
|
|
||
|
<p>The order in which the sample values in a frame are transmitted is
|
||
|
illustrated in Figure <a href="doc008.html#f2">2</a>. As can be seen, the values are
|
||
|
transmitted row by row and each row is transmitted from left-most to
|
||
|
right-most column. The left-to-right, top-to-bottom transmission
|
||
|
order applies when the image is viewed in its normal orientation (as
|
||
|
it would be displayed on a screen, for example).
|
||
|
|
||
|
<p>If a frame contains multiple channels, then the channels are
|
||
|
transmitted in an interleaved fashion. Figure <a href="doc008.html#f3">3</a>
|
||
|
illustrates this for the case where a frame contains a complete
|
||
|
red/green/blue image with a bit-depth of 8. For a bit depth of 1,
|
||
|
each byte contains 8 sample values of a <em>single</em> channel. In
|
||
|
other words, a bit depth 1 frame is transmitted in a byte interleaved
|
||
|
fashion.
|
||
|
|
||
|
<p><p><a name="f3"></a>
|
||
|
<center>
|
||
|
|
||
|
<img width=624 height=111 src="img002.gif">
|
||
|
<p><center>Figure 3: Bit and byte order or image data</center>
|
||
|
|
||
|
</center>
|
||
|
<p>
|
||
|
|
||
|
<p>When transmitting an image frame by frame, the frontend needs to know
|
||
|
what part of the image a frame represents (and how many frames it
|
||
|
should expect). For that purpose, the SANE API tags every frame with
|
||
|
a type. This version of the SANE standard supports the following
|
||
|
frame types:
|
||
|
<blockquote>
|
||
|
<dl>
|
||
|
|
||
|
<p><dt><tt>SANE_FRAME_GRAY<a name="i1"></tt>:<dd> The frame contains a single
|
||
|
channel of data that represents sample values from a spectral band
|
||
|
that covers the human visual range. The image consists of this
|
||
|
frame only.
|
||
|
|
||
|
<p><dt><tt>SANE_FRAME_RGB<a name="i2"></tt>:<dd> The frame contains three
|
||
|
channels of data that represent sample values from the red, green,
|
||
|
and blue spectral bands. The sample values are interleaved in the
|
||
|
order red, green, and blue. The image consists of this frame only.
|
||
|
|
||
|
<p><dt><tt>SANE_FRAME_RED<a name="i3"></tt>:<dd> The frame contains one channel
|
||
|
of data that represents sample values from the red spectral band.
|
||
|
The complete image consists of three frames:
|
||
|
<tt>SANE_FRAME_RED</tt>, <tt>SANE_FRAME_GREEN</tt>, and
|
||
|
<tt>SANE_FRAME_BLUE</tt>. The order in which the frames are
|
||
|
transmitted chosen by the backend.
|
||
|
|
||
|
<p><dt><tt>SANE_FRAME_GREEN<a name="i4"></tt>:<dd> The frame contains one
|
||
|
channel of data that represents sample values from the green
|
||
|
spectral band. The complete image consists of three frames:
|
||
|
<tt>SANE_FRAME_RED</tt>, <tt>SANE_FRAME_GREEN</tt>, and
|
||
|
<tt>SANE_FRAME_BLUE</tt>. The order in which the frames are
|
||
|
transmitted chosen by the backend.
|
||
|
|
||
|
<p><dt><tt>SANE_FRAME_BLUE<a name="i5"></tt>:<dd> The frame contains one channel
|
||
|
of data that represents sample values from the blue spectral band.
|
||
|
The complete image consists of three frames:
|
||
|
<tt>SANE_FRAME_RED</tt>, <tt>SANE_FRAME_GREEN</tt>, and
|
||
|
<tt>SANE_FRAME_BLUE</tt>. The order in which the frames are
|
||
|
transmitted chosen by the backend.
|
||
|
|
||
|
<p></dl>
|
||
|
</blockquote>
|
||
|
|
||
|
<p>In frames of type <tt>SANE_FRAME_GRAY</tt>, when the bit depth is 1 there are
|
||
|
only two sample values possible, 1 represents minimum intensity
|
||
|
(black) and 0 represents maximum intensity (white). For all other bit
|
||
|
depth and frame type combinations, a sample value of 0 represents
|
||
|
minimum intensity and larger values represent increasing intensity.
|
||
|
|
||
|
<p>The combination of bit depth 1 and <tt>SANE_FRAME_RGB</tt> (or
|
||
|
<tt>SANE_FRAME_RED</tt>, <tt>SANE_FRAME_GREEN</tt>, <tt>SANE_FRAME_BLUE</tt>)
|
||
|
is rarely used and may not be supported by every frontend.
|
||
|
|
||
|
<p><p><hr>
|
||
|
<a href="doc009.html"><img src=../icons/next.gif alt="Next"></a>
|
||
|
<a href="doc000.html"><img src=../icons/up.gif alt="Up"></a>
|
||
|
<a href="doc007.html"><img src=../icons/previous.gif alt="Previous"></a>
|
||
|
<a href="doc000.html"><img src=../icons/contents.gif alt="Contents"></a>
|
||
|
<a href="doc019.html"><img src=../icons/index.gif alt="Index"></a>
|
||
|
<hr>
|
||
|
</body></html>
|