苹果7苹果7原装耳机怎么分辨辨真假

首先看下效果图:然后是两张gif的对比& &//原本图是正着走的& &//处理后是倒着走的
gif是动态的嘛。然后我昨天和一个朋友聊天的时候发了一串相同的gif图,然后看着千篇一律的东西。我想能不能写个程序实现gif的初始状态不同呢。什么意思呢。我们知道,gif是由帧构成的,我想实现的功能是比如一个gif共有十帧,那么我写出来的程序能够生成10个gif文件,分别对应不同的初始状态来进行循环。后来一想,gif帧太多的话,比较慢,而且也不实用,于是决定简化一下,只做一个反转工具,比如一个gif是从左到右播放的,通过这个成功可以生成一个相同的gif图,不过是倒着播放的。
思路很简单,就是先把gif分解成很多帧,然后对帧进行合并,合并帧之前把帧的位置反转一下就可以了。因为我自己对图像处理的知识不懂,只想到了思路,所以这些功能都要找些资料,然后修改,测试。
分割帧的代码如下
//解码gif图片
public List&string& GetFrames(stringpPath,stringpSavedPath)
Image gif=Image.FromFile(pPath);
FrameDimension fd=newFrameDimension(gif.FrameDimensionsList[0]);
//获取帧数(gif图片可能包含多帧,其它格式图片一般仅一帧)
intcount=gif.GetFrameCount(fd);
List&string&gifList=newList&string&();
//以Jpeg格式保存各帧
for(inti=0;i&i++)
gif.SelectActiveFrame(fd,i);
gif.Save(pSavedPath+"\\frame_"+i+".png",ImageFormat.Png);
gifList.Add(pSavedPath+"\\frame_"+i+".png");
returngifL
可以看到,返回了一个包含所有生成的帧地址的list列表。然后就是使用gifList作为参数来合并了。
//获取系统临时目录存放解码后的png图片\r\n
stringtemppath=System.Environment.GetEnvironmentVariable("TEMP");
List&string&gifList=GetFrames(tBoxFile.Text,temppath);
gifList.Reverse();
StringoutputFilePath="new.gif";
AnimatedGifEncoder ae=newAnimatedGifEncoder();
ae.Start(outputFilePath);
ae.SetDelay(100);
// 延迟间隔\r\n
ae.SetRepeat(0);
//-1:不循环,0:总是循环 播放
for(inti=0,count=gifList.Ci&i++)
ae.AddFrame(Image.FromFile(gifList[i]));
ae.Finish();
MessageBox.Show("成功!新文件已保存在同目录");
这里面使用了AnimatedGifEncoder这个类,这是ponents.dll动态连接库里的类(此库开源,文末给出地址),是我在codeProject上找到的。首先我把gifList反转,然后合并保存到同目录。中间生成的帧为了方便我保存到了temp目录。
本来这个库里是分割gif的功能的。但是我实际测试后发现效果非常差,图片黑条泛滥,根本没法看。所以还是使用上面那段代码,相关代码我依然保存在工程里,有兴趣可以自己测试。
阅读(...) 评论()NGif, Animated GIF Encoder for .NET - CodeProject
Sign up for our free weekly .
Sign in with
940.8K views14.4K downloads115 bookmarked
&4.00 (55 votes)
4.00/5 - 55 votesμ 4.00, σa 2.75 []
Rate this:
Create animated GIF images using C#.
Introduction
Because .NET Framework can't create animated GIF images, NGif provides a way to create GIF animations in the .NET framework. It can create an animated GIF from several images and extract images from an animated GIF.
Using the code
String [] imageFilePaths = new String[]{"c:\\01.png","c:\\02.png","c:\\03.png"};
String outputFilePath = "c:\\test.gif";
AnimatedGifEncoder e = new AnimatedGifEncoder();
e.Start( outputFilePath );
e.SetDelay(500);
e.SetRepeat(0);
for (int i = 0, count = imageFilePaths.L i & i++ )
e.AddFrame( Image.FromFile( imageFilePaths[i] ) );
e.Finish();
string outputPath = "c:\\";
GifDecoder gifDecoder = new GifDecoder();
gifDecoder.Read( "c:\\test.gif" );
for ( int i = 0, count = gifDecoder.GetFrameCount(); i & i++ )
Image frame = gifDecoder.GetFrame( i );
frame.Save( outputPath + Guid.NewGuid().ToString()
+ ".png", ImageFormat.Png );
Points of Interest
Use Stream to replace BinaryWriter when you write a fixed-byte structured binary file.
31 Aug 2005: Draft.
This article, along with any associated source code and files, is licensed under
No Biography provided
Comments and Discussions
General &&
Suggestion &&
Question &&
Admin && Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.
Last Updated 1 Sep 2005
Article Copyright 2005 by gOODiDEA.NETEverything else
Copyright & ,界面很酷的C#仿QQ聊天软件源代码 展示 AnimatedGifEncoder.cs源代码
- 下载整个 - 类型:.cs文件
using System;
using System.Drawing;
using System.IO;
namespace LanMsg.Gif.Components
& & & & public class AnimatedGifEncoder
& & & & {
& & & & & & & & protected int width; // image size
& & & & & & & & protected int height;
& & & & & & & & protected Color transparent = Color.Empty; // transparent color if given
& & & & & & & & protected int transIndex; // transparent index in color table
& & & & & & & & protected int repeat = -1; // no repeat
& & & & & & & & protected int delay = 0; // frame delay (hundredths)
& & & & & & & & protected bool started = false; // ready to output frames
& & & & & & & & //& & & protected BinaryW
& & & & & & & & protected FileStream fs;
& & & & & & & & protected Image image; // current frame
& & & & & & & & protected byte[] pixels; // BGR byte array from frame
& & & & & & & & protected byte[] indexedPixels; // converted frame indexed to palette
& & & & & & & & protected int colorDepth; // number of bit planes
& & & & & & & & protected byte[] colorTab; // RGB palette
& & & & & & & & protected bool[] usedEntry = new bool[256]; // active palette entries
& & & & & & & & protected int palSize = 7; // color table size (bits-1)
& & & & & & & & protected int dispose = -1; // disposal code (-1 = use default)
& & & & & & & & protected bool closeStream = false; // close stream when finished
& & & & & & & & protected bool firstFrame = true;
& & & & & & & & protected bool sizeSet = false; // if false, get size from first frame
& & & & & & & & protected int sample = 10; // default sample interval for quantizer
& & & & & & & & /**
& & & & & & & & &* Sets the delay time between each frame, or changes it
& & & & & & & & &* for subsequent frames (applies to last frame added).
& & & & & & & & &*
& & & & & & & & &* @param ms int delay time in milliseconds
& & & & & & & & &*/
& & & & & & & & public void SetDelay(int ms)
& & & & & & & & {
& & & & & & & & & & & & delay = ( int ) Math.Round(ms / 10.0f);
& & & & & & & & }
& & & & & & & & /**
& & & & & & & & &* Sets the GIF frame disposal code for the last added frame
& & & & & & & & &* and any subsequent frames. &Default is 0 if no transparent
& & & & & & & & &* color has been set, otherwise 2.
& & & & & & & & &* @param code int disposal code.
& & & & & & & & &*/
& & & & & & & & public void SetDispose(int code)
& & & & & & & & {
& & & & & & & & & & & & if (code &= 0)
& & & & & & & & & & & & {
& & & & & & & & & & & & & & & & dispose = code;
& & & & & & & & & & & & }
& & & & & & & & }
& & & & & & & & /**
& & & & & & & & &* Sets the number of times the set of GIF frames
& & & & & & & & &* should be played. &Default is 1; 0 means play
& & & & & & & & &* indefinitely. &Must be invoked before the first
& & & & & & & & &* image is added.
& & & & & & & & &*
& & & & & & & & &* @param iter int number of iterations.
& & & & & & & & &* @return
& & & & & & & & &*/
& & & & & & & & public void SetRepeat(int iter)
& & & & & & & & {
& & & & & & & & & & & & if (iter &= 0)
& & & & & & & & & & & & {
& & & & & & & & & & & & & & & & repeat = iter;
& & & & & & & & & & & & }
& & & & & & & & }
& & & & & & & & /**
& & & & & & & & &* Sets the transparent color for the last added frame
& & & & & & & & &* and any subsequent frames.
& & & & & & & & &* Since all colors are subject to modification
& & & & & & & & &* in the quantization process, the color in the final
& & & & & & & & &* palette for each frame closest to the given color
& & & & & & & & &* becomes the transparent color for that frame.
& & & & & & & & &* May be set to null to indicate no transparent color.
& & & & & & & & &*
& & & & & & & & &* @param c Color to be treated as transparent on display.
& & & & & & & & &*/
& & & & & & & & public void SetTransparent(Color c)
& & & & & & & & {
& & & & & & & & & & & & transparent = c;
& & & & & & & & }
& & & & & & & & /**
& & & & & & & & &* Adds next GIF frame. &The frame is not written immediately, but is
& & & & & & & & &* actually deferred until the next frame is received so that timing
& & & & & & & & &* data can be inserted. &Invoking &code&finish()&/code& flushes all
& & & & & & & & &* frames. &If &code&setSize&/code& was not invoked, the size of the
& & & & & & & & &* first image is used for all subsequent frames.
& & & & & & & & &*
& & & & & & & & &* @param im BufferedImage containing frame to write.
& & & & & & & & &* @return true if successful.
& & & & & & & & &*/
& & & & & & & & public bool AddFrame(Image im)
& & & & & & & & {
& & & & & & & & & & & & if ((im == null) || !started)
& & & & & & & & & & & & {
& & & & & & & & & & & & & & & & return false;
& & & & & & & & & & & & }
& & & & & & & & & & & & bool ok = true;
& & & & & & & & & & & & try
& & & & & & & & & & & & {
& & & & & & & & & & & & & & & & if (!sizeSet)
& & & & & & & & & & & & & & & & {
& & & & & & & & & & & & & & & & & & & & // use first frame's size
& & & & & & & & & & & & & & & & & & & & SetSize(im.Width, im.Height);
& & & & & & & & & & & & & & & & }
& & & & & & & & & & & & & & & & image = im;
& & & & & & & & & & & & & & & & GetImagePixels(); // convert to correct format if necessary
& & & & & & & & & & & & & & & & AnalyzePixels(); // build color table & map pixels
& & & & & & & & & & & & & & & & if (firstFrame)
& & & & & & & & & & & & & & & & {
& & & & & & & & & & & & & & & & & & & & WriteLSD(); // logical screen descriptior
& & & & & & & & & & & & & & & & & & & & WritePalette(); // global color table
& & & & & & & & & & & & & & & & & & & & if (repeat &= 0)
& & & & & & & & & & & & & & & & & & & & {
& & & & & & & & & & & & & & & & & & & & & & & & // use NS app extension to indicate reps
& & & & & & & & & & & & & & & & & & & & & & & & WriteNetscapeExt();
& & & & & & & & & & & & & & & & & & & & }
& & & & & & & & & & & & & & & & }
& & & & & & & & & & & & & & & & WriteGraphicCtrlExt(); // write graphic control extension
& & & & & & & & & & & & & & & & WriteImageDesc(); // image descriptor
& & & & & & & & & & & & & & & & if (!firstFrame)
& & & & & & & & & & & & & & & & {
& & & & & & & & & & & & & & & & & & & & WritePalette(); // local color table
& & & & & & & & & & & & & & & & }
& & & & & & & & & & & & & & & & WritePixels(); // encode and write pixel data
& & & & & & & & & & & & & & & & firstFrame = false;
& & & & & & & & & & & & }
& & & & & & & & & & & & catch (IOException e)
& & & & & & & & & & & & {
& & & & & & & & & & & & & & & & ok = false;
& & & & & & & & & & & & }
& & & & & & & & & & & & return ok;
& & & & & & & & }
& & & & & & & & /**
& & & & & & & & &* Flushes any pending data and closes output file.
& & & & & & & & &* If writing to an OutputStream, the stream is not
& & & & & & & & &* closed.
& & & & & & & & &*/
& & & & & & & & public bool Finish()
& & & & & & & & {
& & & & & & & & & & & & if (!started) return false;
& & & & & & & & & & & & bool ok = true;
& & & & & & & & & & & & started = false;
& & & & & & & & & & & & try
& & & & & & & & & & & & {
& & & & & & & & & & & & & & & & fs.WriteByte( 0x3b ); // gif trailer
& & & & & & & & & & & & & & & & fs.Flush();
& & & & & & & & & & & & & & & & if (closeStream)
& & & & & & & & & & & & & & & & {
& & & & & & & & & & & & & & & & & & & & fs.Close();
& & & & & & & & & & & & & & & & }
& & & & & & & & & & & & }
& & & & & & & & & & & & catch (IOException e)
& & & & & & & & & & & & {
& & & & & & & & & & & & & & & & ok = false;
& & & & & & & & & & & & }
& & & & & & & & & & & & // reset for subsequent use
& & & & & & & & & & & & transIndex = 0;
& & & & & & & & & & & & fs = null;
& & & & & & & & & & & & image = null;
& & & & & & & & & & & & pixels = null;
& & & & & & & & & & & & indexedPixels = null;
& & & & & & & & & & & & colorTab = null;
& & & & & & & & & & & & closeStream = false;
& & & & & & & & & & & & firstFrame = true;
& & & & & & & & & & & & return ok;
& & & & & & & & }
& & & & & & & & /**
& & & & & & & & &* Sets frame rate in frames per second. &Equivalent to
& & & & & & & & &* &code&setDelay(1000/fps)&/code&.
& & & & & & & & &*
& & & & & & & & &* @param fps float frame rate (frames per second)
& & & & & & & & &*/
& & & & & & & & public void SetFrameRate(float fps)
& & & & & & & & {
& & & & & & & & & & & & if (fps != 0f)
& & & & & & & & & & & & {
& & & & & & & & & & & & & & & & delay = ( int ) Math.Round(100f / fps);
& & & & & & & & & & & & }
& & & & & & & & }
& & & & & & & & /**
& & & & & & & & &* Sets quality of color quantization (conversion of images
& & & & & & & & &* to the maximum 256 colors allowed by the GIF specification).
& & & & & & & & &* Lower values (minimum = 1) produce better colors, but slow
& & & & & & & & &* processing significantly. &10 is the default, and produces
& & & & & & & & &* good color mapping at reasonable speeds. &Values greater
& & & & & & & & &* than 20 do not yield significant improvements in speed.
& & & & & & & & &*
& & & & & & & & &* @param quality int greater than 0.
& & & & & & & & &* @return
& & & & & & & & &*/
& & & & & & & & public void SetQuality(int quality)
& & & & & & & & {
& & & & & & & & & & & & if (quality & 1) quality = 1;
& & & & & & & & & & & & sample = quality;
& & & & & & & & }
& & & & & & & & /**
& & & & & & & & &* Sets the GIF frame size. &The default size is the
& & & & & & & & &* size of the first frame added if this method is
& & & & & & & & &* not invoked.
& & & & & & & & &*
& & & & & & & & &* @param w int frame width.
& & & & & & & & &* @param h int frame width.
& & & & & & & & &*/
& & & & & & & & public void SetSize(int w, int h)
& & & & & & & & {
& & & & & & & & & & & & if (started && !firstFrame) return;
& & & & & & & & & & & & width = w;
& & & & & & & & & & & & height = h;
& & & & & & & & & & & & if (width & 1) width = 320;
& & & & & & & & & & & & if (height & 1) height = 240;
& & & & & & & & & & & & sizeSet = true;
& & & & & & & & }
& & & & & & & & /**
& & & & & & & & &* Initiates GIF file creation on the given stream. &The stream
& & & & & & & & &* is not closed automatically.
& & & & & & & & &*
& & & & & & & & &* @param os OutputStream on which GIF images are written.
& & & & & & & & &* @return false if initial write failed.
& & & & & & & & &*/
& & & & & & & & public bool Start( FileStream os)
& & & & & & & & {
& & & & & & & & & & & & if (os == null) return false;
& & & & & & & & & & & & bool ok = true;
& & & & & & & & & & & & closeStream = false;
& & & & & & & & & & & & fs = os;
& & & & & & & & & & & & try
& & & & & & & & & & & & {
& & & & & & & & & & & & & & & & WriteString(&GIF89a&); // header
& & & & & & & & & & & & }
& & & & & & & & & & & & catch (IOException e)
& & & & & & & & & & & & {
& & & & & & & & & & & & & & & & ok = false;
& & & & & & & & & & & & }
& & & & & & & & & & & & return started = ok;
& & & & & & & & }
& & & & & & & & /**
& & & & & & & & &* Initiates writing of a GIF file with the specified name.
& & & & & & & & &*
& & & & & & & & &* @param file String containing output file name.
& & & & & & & & &* @return false if open or initial write failed.
& & & & & & & & &*/
& & & & & & & & public bool Start(String file)
& & & & & & & & {
& & & & & & & & & & & & bool ok = true;
& & & & & & & & & & & & try
& & & & & & & & & & & & {
& & & & & & & & & & & & & & & & //& & & & & & & & & & & bw = new BinaryWriter( new FileStream( file, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None ) );
& & & & & & & & & & & & & & & & fs = new FileStream( file, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None );
& & & & & & & & & & & & & & & & ok = Start(fs);
& & & & & & & & & & & & & & & & closeStream = true;
& & & & & & & & & & & & }
& & & & & & & & & & & & catch (IOException e)
& & & & & & & & & & & & {
& & & & & & & & & & & & & & & & ok = false;
& & & & & & & & & & & & }
& & & & & & & & & & & & return started = ok;
& & & & & & & & }
& & & & & & & & /**
& & & & & & & & &* Analyzes image colors and creates color map.
& & & & & & & & &*/
& & & & & & & & protected void AnalyzePixels()
& & & & & & & & {
& & & & & & & & & & & & int len = pixels.Length;
& & & & & & & & & & & & int nPix = len / 3;
& & & & & & & & & & & & indexedPixels = new byte[nPix];
& & & & & & & & & & & & NeuQuant nq = new NeuQuant(pixels, len, sample);
& & & & & & & & & & & & // initialize quantizer
& & & & & & & & & & & & colorTab = nq.Process(); // create reduced palette
& & & & & & & & & & & & // convert map from BGR to RGB
//& & & & & & & & & & & for (int i = 0; i & colorTab.L i += 3)
//& & & & & & & & & & & {
//& & & & & & & & & & & & & & & byte temp = colorTab[i];
//& & & & & & & & & & & & & & & colorTab[i] = colorTab[i + 2];
//& & & & & & & & & & & & & & & colorTab[i + 2] =
//& & & & & & & & & & & & & & & usedEntry[i / 3] =
//& & & & & & & & & & & }
& & & & & & & & & & & & // map image pixels to new palette
& & & & & & & & & & & & int k = 0;
& & & & & & & & & & & & for (int i = 0; i & nPix; i++)
& & & & & & & & & & & & {
& & & & & & & & & & & & & & & & int index =
& & & & & & & & & & & & & & & & & & & & nq.Map(pixels[k++] & 0xff,
& & & & & & & & & & & & & & & & & & & & pixels[k++] & 0xff,
& & & & & & & & & & & & & & & & & & & & pixels[k++] & 0xff);
& & & & & & & & & & & & & & & & usedEntry[index] = true;
& & & & & & & & & & & & & & & & indexedPixels[i] = (byte) index;
& & & & & & & & & & & & }
& & & & & & & & & & & & pixels = null;
& & & & & & & & & & & & colorDepth = 8;
& & & & & & & & & & & & palSize = 7;
& & & & & & & & & & & & // get closest match to transparent color if specified
& & & & & & & & & & & & if (transparent != Color.Empty )
& & & & & & & & & & & & {
& & & & & & & & & & & & & & & & transIndex = FindClosest(transparent);
& & & & & & & & & & & & }
& & & & & & & & }
& & & & & & & & /**
& & & & & & & & &* Returns index of palette color closest to c
& & & & & & & & &*
& & & & & & & & &*/
& & & & & & & & protected int FindClosest(Color c)
& & & & & & & & {
& & & & & & & & & & & & if (colorTab == null) return -1;
& & & & & & & & & & & & int r = c.R;
& & & & & & & & & & & & int g = c.G;
& & & & & & & & & & & & int b = c.B;
& & & & & & & & & & & & int minpos = 0;
& & & & & & & & & & & & int dmin = 256 * 256 * 256;
& & & & & & & & & & & & int len = colorTab.Length;
& & & & & & & & & & & & for (int i = 0; i & len;)
& & & & & & & & & & & & {
& & & & & & & & & & & & & & & & int dr = r - (colorTab[i++] & 0xff);
& & & & & & & & & & & & & & & & int dg = g - (colorTab[i++] & 0xff);
& & & & & & & & & & & & & & & & int db = b - (colorTab[i] & 0xff);
& & & & & & & & & & & & & & & & int d = dr * dr + dg * dg + db * db;
& & & & & & & & & & & & & & & & int index = i / 3;
& & & & & & & & & & & & & & & & if (usedEntry[index] && (d & dmin))
& & & & & & & & & & & & & & & & {
& & & & & & & & & & & & & & & & & & & & dmin = d;
& & & & & & & & & & & & & & & & & & & & minpos = index;
& & & & & & & & & & & & & & & & }
& & & & & & & & & & & & & & & & i++;
& & & & & & & & & & & & }
& & & & & & & & & & & & return minpos;
& & & & & & & & }
& & & & & & & & /**
& & & & & & & & &* Extracts image pixels into byte array &pixels&
& & & & & & & & &*/
& & & & & & & & protected void GetImagePixels()
& & & & & & & & {
& & & & & & & & & & & & int w = image.Width;
& & & & & & & & & & & & int h = image.Height;
& & & & & & & & & & & & //& & & & & & & int type = image.GetType().;
& & & & & & & & & & & & if ((w != width)
& & & & & & & & & & & & & & & & || (h != height)
& & & & & & & & & & & & & & & & )
& & & & & & & & & & & & {
& & & & & & & & & & & & & & & & // create new image with right size/format
& & & & & & & & & & & & & & & & Image temp =
& & & & & & & & & & & & & & & & & & & & new Bitmap(width, height );
& & & & & & & & & & & & & & & & Graphics g = Graphics.FromImage( temp );
& & & & & & & & & & & & & & & & g.DrawImage(image, 0, 0);
& & & & & & & & & & & & & & & & image = temp;
& & & & & & & & & & & & & & & & g.Dispose();
& & & & & & & & & & & & }
& & & & & & & & & & & & /*
& & & & & & & & & & & & & & & & ToDo:
& & & & & & & & & & & & & & & & improve performance: use unsafe code
& & & & & & & & & & & & */
& & & & & & & & & & & & pixels = new Byte [ 3 * image.Width * image.Height ];
& & & & & & & & & & & & int count = 0;
& & & & & & & & & & & & Bitmap tempBitmap = new Bitmap( image );
& & & & & & & & & & & & for (int th = 0; th & image.Height; th++)
& & & & & & & & & & & & {
& & & & & & & & & & & & & & & & for (int tw = 0; tw & image.Width; tw++)
& & & & & & & & & & & & & & & & {
& & & & & & & & & & & & & & & & & & & & Color color = tempBitmap.GetPixel(tw, th);
& & & & & & & & & & & & & & & & & & & & pixels[count] = color.R;
& & & & & & & & & & & & & & & & & & & & count++;
& & & & & & & & & & & & & & & & & & & & pixels[count] = color.G;
& & & & & & & & & & & & & & & & & & & & count++;
& & & & & & & & & & & & & & & & & & & & pixels[count] = color.B;
& & & & & & & & & & & & & & & & & & & & count++;
& & & & & & & & & & & & & & & & }
& & & & & & & & & & & & }
& & & & & & & & & & & & //& & & & & & & pixels = ((DataBufferByte) image.getRaster().getDataBuffer()).getData();
& & & & & & & & }
& & & & & & & & /**
& & & & & & & & &* Writes Graphic Control Extension
& & & & & & & & &*/
& & & & & & & & protected void WriteGraphicCtrlExt()
& & & & & & & & {
& & & & & & & & & & & & fs.WriteByte(0x21); // extension introducer
& & & & & & & & & & & & fs.WriteByte(0xf9); // GCE label
& & & & & & & & & & & & fs.WriteByte(4); // data block size
& & & & & & & & & & & & int transp, disp;
& & & & & & & & & & & & if (transparent == Color.Empty )
& & & & & & & & & & & & {
& & & & & & & & & & & & & & & & transp = 0;
& & & & & & & & & & & & & & & & disp = 0; // dispose = no action
& & & & & & & & & & & & }
& & & & & & & & & & & & else
& & & & & & & & & & & & {
& & & & & & & & & & & & & & & & transp = 1;
& & & & & & & & & & & & & & & & disp = 2; // force clear if using transparent color
& & & & & & & & & & & & }
& & & & & & & & & & & & if (dispose &= 0)
& & & & & & & & & & & & {
& & & & & & & & & & & & & & & & disp = dispose & 7; // user override
& & & & & & & & & & & & }
& & & & & & & & & & & & disp &&= 2;
& & & & & & & & & & & & // packed fields
& & & & & & & & & & & & fs.WriteByte( Convert.ToByte( 0 | // 1:3 reserved
& & & & & & & & & & & & & & & & disp | // 4:6 disposal
& & & & & & & & & & & & & & & & 0 | // 7 & user input - 0 = none
& & & & & & & & & & & & & & & & transp )); // 8 & transparency flag
& & & & & & & & & & & & WriteShort(delay); // delay x 1/100 sec
& & & & & & & & & & & & fs.WriteByte( Convert.ToByte( transIndex)); // transparent color index
& & & & & & & & & & & & fs.WriteByte(0); // block terminator
& & & & & & & & }
& & & & & & & & /**
& & & & & & & & &* Writes Image Descriptor
& & & & & & & & &*/
& & & & & & & & protected void WriteImageDesc()
& & & & & & & & {
& & & & & & & & & & & & fs.WriteByte(0x2c); // image separator
& & & & & & & & & & & & WriteShort(0); // image position x,y = 0,0
& & & & & & & & & & & & WriteShort(0);
& & & & & & & & & & & & WriteShort(width); // image size
& & & & & & & & & & & & WriteShort(height);
& & & & & & & & & & & & // packed fields
& & & & & & & & & & & & if (firstFrame)
& & & & & & & & & & & & {
& & & & & & & & & & & & & & & & // no LCT &- GCT is used for first (or only) frame
& & & & & & & & & & & & & & & & fs.WriteByte(0);
& & & & & & & & & & & & }
& & & & & & & & & & & & else
& & & & & & & & & & & & {
& & & & & & & & & & & & & & & & // specify normal LCT
& & & & & & & & & & & & & & & & fs.WriteByte( Convert.ToByte( 0x80 | // 1 local color table &1=yes
& & & & & & & & & & & & & & & & & & & & 0 | // 2 interlace - 0=no
& & & & & & & & & & & & & & & & & & & & 0 | // 3 sorted - 0=no
& & & & & & & & & & & & & & & & & & & & 0 | // 4-5 reserved
& & & & & & & & & & & & & & & & & & & & palSize ) ); // 6-8 size of color table
& & & & & & & & & & & & }
& & & & & & & & }
& & & & & & & & /**
& & & & & & & & &* Writes Logical Screen Descriptor
& & & & & & & & &*/
& & & & & & & & protected void WriteLSD() &
& & & & & & & & {
& & & & & & & & & & & & // logical screen size
& & & & & & & & & & & & WriteShort(width);
& & & & & & & & & & & & WriteShort(height);
& & & & & & & & & & & & // packed fields
& & & & & & & & & & & & fs.WriteByte( Convert.ToByte (0x80 | // 1 & : global color table flag = 1 (gct used)
& & & & & & & & & & & & & & & & 0x70 | // 2-4 : color resolution = 7
& & & & & & & & & & & & & & & & 0x00 | // 5 & : gct sort flag = 0
& & & & & & & & & & & & & & & & palSize) ); // 6-8 : gct size
& & & & & & & & & & & & fs.WriteByte(0); // background color index
& & & & & & & & & & & & fs.WriteByte(0); // pixel aspect ratio - assume 1:1
& & & & & & & & }
& & & & & & & & /**
& & & & & & & & &* Writes Netscape application extension to define
& & & & & & & & &* repeat count.
& & & & & & & & &*/
& & & & & & & & protected void WriteNetscapeExt()
& & & & & & & & {
& & & & & & & & & & & & fs.WriteByte(0x21); // extension introducer
& & & & & & & & & & & & fs.WriteByte(0xff); // app extension label
& & & & & & & & & & & & fs.WriteByte(11); // block size
& & & & & & & & & & & & WriteString(&NETSCAPE& + &2.0&); // app id + auth code
& & & & & & & & & & & & fs.WriteByte(3); // sub-block size
& & & & & & & & & & & & fs.WriteByte(1); // loop sub-block id
& & & & & & & & & & & & WriteShort(repeat); // loop count (extra iterations, 0=repeat forever)
& & & & & & & & & & & & fs.WriteByte(0); // block terminator
& & & & & & & & }
& & & & & & & & /**
& & & & & & & & &* Writes color table
& & & & & & & & &*/
& & & & & & & & protected void WritePalette()
& & & & & & & & {
& & & & & & & & & & & & fs.Write(colorTab, 0, colorTab.Length);
& & & & & & & & & & & & int n = (3 * 256) - colorTab.Length;
& & & & & & & & & & & & for (int i = 0; i & n; i++)
& & & & & & & & & & & & {
& & & & & & & & & & & & & & & & fs.WriteByte(0);
& & & & & & & & & & & & }
& & & & & & & & }
& & & & & & & & /**
& & & & & & & & &* Encodes and writes pixel data
& & & & & & & & &*/
& & & & & & & & protected void WritePixels()
& & & & & & & & {
& & & & & & & & & & & & LZWEncoder encoder =
& & & & & & & & & & & & & & & & new LZWEncoder(width, height, indexedPixels, colorDepth);
& & & & & & & & & & & & encoder.Encode( fs );
& & & & & & & & }
& & & & & & & & /**
& & & & & & & & &* & &Write 16-bit value to output stream, LSB first
& & & & & & & & &*/
& & & & & & & & protected void WriteShort(int value)
& & & & & & & & {
& & & & & & & & & & & & fs.WriteByte( Convert.ToByte( value & 0xff));
& & & & & & & & & & & & fs.WriteByte( Convert.ToByte( (value && 8) & 0xff ));
& & & & & & & & }
& & & & & & & & /**
& & & & & & & & &* Writes string to output stream
& & & & & & & & &*/
& & & & & & & & protected void WriteString(String s)
& & & & & & & & {
& & & & & & & & & & & & char[] chars = s.ToCharArray();
& & & & & & & & & & & & for (int i = 0; i & chars.Length; i++)
& & & & & & & & & & & & {
& & & & & & & & & & & & & & & & fs.WriteByte((byte) chars[i]);
& & & & & & & & & & & & }
& & & & & & & & }
& & & & }
- 下载整个
相关源码/软件:
- 可以绘制出无限个三解形,立体感很强,基于Delaunay。程序可以自动判断交点。
- 这个功能很使用,大家说不定能用上,C++读取/运行系统控制面板中所有程序的列表信息。
- 编写远程控制软件要用到,此是修正版本的远程桌面传输程序,基于分块和隔行扫描原理,DELPHI和C++...
- 神经网络法的数字识别代码,C++实现,很早时候编写的代码,重要的是思想。
- 功能还很多,可以设定时间自动关机,还可以重启、注销,具体功能大家可以通过截图看出来。
- 一个看上去很专业、功能也不错的Html网页在线编辑器控件,它的原理是采用IE的命令标识符对.NET的...
- 很多学编程的朋友在最开始的时候都喜欢模仿一些系统里的小程序,比如记录本、录音机、音乐播放器等,希望通...
- 从界面上来说和WIN2000系统自带的播放器很相似,看上去很简洁。主要是演示C#如何播放MP3文件的...
- 大家可以看截图,界面还可以吧,而且声音配的也很搞笑,玩上一局可以很好的休闲一下了,它也可以设定中高低...
- 北大青鸟软件组成员开发的一套客户关系系统时所采用的登录界面,还带有动画效果,登录框淅入渐出,感觉很酷...
- 货源信息管理:车源信息管理&专线信息管理&二手车讯管理&司机信息管理
- 用VB。NET开发的写字板程序功能较全
- 很实用的中文报表组件
- 用PB和SQL&Server2000做的,服务器名为MICROSOF-32DBE9&nbs...
- 售前管理A、预约登记:对有明确意向和购房兴趣的客户个人资料、购房类型等进行登记、查询;对客户看楼进行...
- SatManager组件是专门为PB设计的一套界面组件,使用Smart组件您可以轻松实现PB窗口、控...
- 旅行社管理系统,VB.Net开发。
- 实现语音金额的总额,应收款金额,找零金额。
- 单机版餐饮服务系统(vb.net代码).
- 非常漂亮、实用的日历控件for&.net&3.5,对于SQL数据表中带有日历的数...

我要回帖

更多关于 苹果7正品耳机分辨真假 的文章

 

随机推荐