Makale numarası: 319061 - Son Gözden Geçirme: 11 Aralık 2006 Pazartesi - Gözden geçirme: 4.7 Nasıl yapılır: .gif dosya Visual C# kullanarak yeni bir renk tabloyu kaydedin...
Bu SayfadaÖzetCompuServe Grafik Değişim Biçimi (GIF) en çok renk tablo içinde düzenlenir, 256 renk olarak tasarlanmıştır. .Gif resim dosyaya genel değişiklikler yapmak için <a0></a0>, bir özel renk tablosu değiştirmeniz gerekir. Ancak, System.Drawinggörüntü nesneyi düzenler ve sonra GIF kodlayıcı ile kaydetmek için sorular, sonuç .gif dosyası, bir noktalı resim renk tablosu içerir. GIF Kodlayıcısı'nı kullanarak bir özel renk tablosu ile bir Resim kaydetmek için <a0></a0>, 256 renk kopyasını System.Drawing değişiklik görüntü ile çalışmanız gerekir. System.Drawing ve GDI + yazılan, .gif dosyaları anlama.Gif görüntü dosyası en fazla 256 renk ifade edebilirsiniz. Renk kıt kaynağın .gif dosyası olduğundan, bu renkleri en iyi duruma getirme sık istenen bir görevdir. Bir en iyi duruma getirilmiş renk tablosu uygulamak için herhangi bir rasgele bir özel renk tablo .gif dosya olmalıdır.Öncelikle geçici GDI + bir sarmalayıcı System.Drawing ad ise, System.Drawing ad alanına özgü bir davranış, bu durumda, açıklanan sürece bu nedenle bu makalede ad alanına GDI + başvuruyor System.Drawing kullanılan bir terimdir. GDI + Resim değiştirir ve GIF Kodlayıcısı'nı kullanarak görüntü bir dosyaya yazar sonra GDI + dosya görüntü nesnenin bit renk sınırlı olan bir yarı ton paleti kullanarak yazar. GDI + 32 bit / piksel (32 BPP) bir renk dönüşümü mu GDI + 32 BPP grafik altyapısıyla yapılan tüm değişiklikler görüntü için onu resmi dosyaya yazar. GDI + görüntüler ve bit eşlemler olarak piksel oluşturulmasını destekler ve bu nedenle bir .gif resmini yükleyebilirsiniz, ancak, GDI + tarafından değiştirildiğinde, 32-BPP grafik altyapısı kullanımını 32 BPP dönüştürme necessitates. Ancak, bir resmi veya bit eşlem olan tarafından değişiklik GDI + piksel özgün biçimi korur ve uygun kodlayıcı ile kayıt yöntemini kullanarak bir dosyaya yazılır. Bu özellik bir Resim için bir <a0>özel renk</a0> tablosuyla .gif dosya kaydedebileceğiniz bir teknik temelini oluşturur. Bir .gif sahip özel bir renk tablosu yazılıyorDeğiştirilmemiş bir bit eşlem GIF kodlayıcı ile yazma ve bit eşlem renk tablosu korumanız; bu nedenle, yeni bir renk tablo .gif dosya kaydetmek için bu yöntemi kullanabilirsiniz.Özgün Resim nesneden resim verisi için geçici bir bit eşlem nesnesi kopyalamak yöntemdir. Bu geçici bir bit eşlem, 8 BPP, bit eşlem, .gif dosya kaydetmek için kullanılan piksel biçimi olan dizin olarak oluşturulur. Bit eşlem renk tablosu SetPalette yöntemini kullanarak ayarlayın ve sonra resim tanımı için bit eşlem geçici olarak kopyalanır. Bit eşlem geçici yinelenen bir tanımlama oluşturduktan sonra 8-BPP renk tablosunu koruyan GIF kodlayıcı ile kaydetmeyi Save() yöntemini kullanabilirsiniz. Bir .gif resmini bir özel renk tablosu içeren bir dosyayı yazmak için şu adımları izleyin:
Örnek kodu kullanmaBu makaledeki örnek kod Bitmap.Save rasgele bir boyuttaki bir özel renk tabloyla bir .gif dosyası yazmak için nasıl kullanılacağını gösterir. Amacı yalnızca gösteri olduğundan, kodu için performans getirilmemiştir. En iyi duruma getirme için en iyi fırsatlar döngü işleme piksel ' dir. GetPixel uygun bir Özet piksel biçimi olan ancak çok yavaş olacaktır. Örnek kod, LockBits piksel biçimi doğrudan erişmek için kullanılan, daha hızlı olacaktır. Hızını artırmak için <a0></a0>, GetPixel yöntemi ve renk sınıfı Özet kullanmayın. Performansı artırmak için <a0></a0>, gri tonlamalı dönüştürme tamsayı matematik kullanarak yerine kayan nokta yeniden yazın.Örnek işlevi, aşağıdaki dört parametreleri alır:
.Gif dosyası oluşturmak için <a0></a0>, dosyaya yazılacak olan görüntü tanımıyla birlikte 8 BPP bitmap nesnesini yeniden başlatmalısınız. Örnek kodda, bir merkez döngü için kullanılan kümesidir renk aslında siyah ve beyaz TV renk uzayına gelen görüntü dönüştürme. Gösteri amaçlı kaynak resim pikselleri kaynak resme bir kopyası bir bit eşlem nesnesi GetPixel() yöntemi yoluyla erişilir. Resim sınıfı GetPixel() yöntemi uygulamadığından, bit eşlem kopyasını yapılır. Piksel piksel, Windows GDI DIB bölümleri ' ni kullanarak yerel yönetilmeyen kod ile birlikte çalışma ve LockBits() yöntemi kullanarak doğrudan erişim gibi erişmek için diğer teknikleri kullanabilirsiniz. Gdi + HDC GDI DIB bölüm için bir bit eşlem kopyalamak BitBlt işlevini kullandığınızda bellek etki alanı denetleyicisi, GDI yeteneklerini eşleştirme rengi kullanır GBitBlt çalışır. Bit eşlem kopya oluşturduktan sonra kayıt yöntemi ImageFormat.gif nesnesiyle bit eşlem, hedef dosyaya yazmak için kullanın. GIF dosyaları ile az 256 renkGDI + sürümü 1.0 GIF codec bileşeni, 8 BPP yalnızca GDI + görüntüleri kodlar. Tüm Resim biçimleri, önce kodlama dönüştürülür. Bu kod, GIF codec Palette.Count özelliği tarafından daha az 256 renk içeren 8 BPP bit eşlem nesneleri tanıdığı için renk sayısı 256'dan az olan .gif dosyaları yazmak için 8-BPP bit eşlem biçimi kullanın.GIF codec hakkında daha fazla bilgi için bu makalenin "References" bölümüne bakın. Ne yazık ki, .NET Framework System.Drawing ad ColorPalette sınıfını bağımsız bir <a0>bit eşlem</a0> nesnesinin örneği oluşturulamıyor. .NET Framework'de System.Drawing.Bitmap sınıfı uygular bir kısıtlama budur; ancak, bu makaledeki yaklaşım kullanmak için <a0></a0>, bit eşlem nesnesi varsayılan değerinden daha az renk içeren yeni bir ColorPalette nesnesi olmalıdır 256 ColorPalette. Bunu başarmak için <a0></a0>, örnek kod, GetColorPalette adlı bir işlevi tanımlar. Bu işlev, yakın bir istenen sayıda renk için renk derinliği olan geçici bir bit eşlem nesnesi oluşturur. Işlev paleti özelliği başvurur ve çağrıyı geri döndürür. Bu yeni bir ColorPalette birkaç olası renk sayımları biriyle oluşturur: 256 renk, 16 renk veya iki renk (tek renkli). 256 Renkten küçük olan .gif dosyaları renk tablo oluşturabilirsiniz, ancak renkli ikinin üssü boyutları için sınırlı tablolarıdır. Renk tablosu ölçüde ikinin üssü sınırlamak, harcanan alanı en aza indirin. Bu örnek, elde edilen renk tablosu 8 renk (2 x 2 x 2) ' dir. Bir bit eşlem o accomodates altı küçük PixelFormat, çünkü ile örnek kod, .gif dosyası 16 renk renk tablosu oluşturulması renkleri. Kod bir pikselin dizin değeri hesaplar, görüntünün piksel tanımları için bit eşlem 8 BPP kopyaladığı işleme döngü kodu, palet boyutu dikkate alınır. GIF codec palet boyutunu sınırlar ve görüntü tanımı için palet boyutu (diğer bir deyişle, olası GIF renk tablo) ile uyumlu değildir ve bu nedenle, .gif dosyaları daha az 256 renk oluşturabilirsiniz dizin değerlerini kısıtlar. GIF saydamlıkÖrnek kodda, ColorPalette oluşturma yordamının ilk girdiden saydamlık özelliği kullanımını gösteren GIF saydam renk olarak ayarlar. Kod SıFıR için <a0>renk</a0> girdisinin Alpha bileşeni'ni ayarlayarak bunu yapar. Bu makaledeki örnek kod, yalnızca gösterim amacıyla kullanılır, bu nedenle, saydam renk bir rasgele seçim ve olabilir tamamen kaynak üzerinde Resim bağımlı beklenmeyen sonuçlar.GIF kodlayıcı ilk rengi saydam renk olarak SıFıR değeri bir alfa ColorPalette tanımlar. Bu, ColorPalette dosyasındaki ilk girdi saydam renk yok anlamına gelir. Alpha bileşenleri sıfır dışında değerler içeren tüm önceki girişleri içeren koşuluyla, herhangi biri palette, olası 256 renkte olabilir. Bileşen değerlerini SıFıR Alpha ile sonraki tüm girişleri dikkate alınmaz. Sıfır olmayan alfa bileşenleri yüklü olan tüm girdileri opak olarak düşünülür. GıF/LZW sorun lisansMicrosoft Lisans .gif dosya biçimini ve çeşitli Microsoft ürünleri yabancı patentler ve Unisys ait ABD kapsamındaki diğer LZW teknolojileri kullanacak biçimde Unisys alınan. Ancak, bu lisans, uygulamalar geliştirmek için Microsoft geliştirme ürünleri ya da araç takımları kullanan üçüncü taraf geliştiriciler genişletmiyor. Üçüncü taraf geliştirici olarak, .gif biçiminde veya LZW teknolojileri, Unisys lisans edinmelisiniz olup olmadığını belirlemeniz gerekir.LZW lisansları ve GIF hakkında ek bilgi için Microsoft Knowledge Base'deki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın: 193543
(http://support.microsoft.com/kb/193543/EN-US/
)
BILGI: GIF Unisys ve LZW teknolojisi lisans bilgileri Örnek kodÖrnek kodMicrosoft, programlama örneklerini yalnızca gösterim amacıyla sağlar; satılabilirlik ve/veya belirli bir amaca uygunluk da dahil, ancak bununla sınırlı olmamak kaydıyla, örtülü veya açık garanti vermez. Bu makale, gösterilen programlama dilini ve yordamları oluşturmak ve hata ayıklamak amacıyla kullanılan araçları kullanmayı bildiğinizi varsayar. Microsoft destek uzmanları, belirli bir yordamın işlevselliğinin açıklanmasına yardımcı olabilir, ancak gereksinimlerinizi karşılamaya yönelik olarak ek işlevsellik sağlamak veya yordamlar geliştirmek amacıyla bu örnekleri değiştirmezler.Programlama deneyiminiz kısıtlıysa, bir Microsoft Sertifikalı İş Ortağı'na veya Microsoft Danışmanlık Hizmetleri'ne başvurabilirsiniz. Daha fazla bilgi için şu Microsoft Web sitelerini ziyaret edin: Microsoft Partner - https://partner.microsoft.com/global/30000104 (https://partner.microsoft.com/global/30000104) Onaylandı Microsoft danışma belgesi Hizmetleri - http://support.microsoft.com/gp/advisoryservice (http://support.microsoft.com/gp/advisoryservice) Kullanılabilir destek seçenekleri ve Microsoft'a başvurma konusunda daha fazla bilgi için aşağıdaki Microsoft Web sitesini ziyaret edin: http://support.microsoft.com/default.aspx?scid=fh;EN-US;CNTACTMS (http://support.microsoft.com/default.aspx?scid=fh;en-us;cntactms) SORUN GİDERMEVarolan dosyanın üzerine yazmak için bu kodu kullandığınızda, sonuç dosyası boyutu ile ilgili bir sorun görünüyor ne bakın. Bu, bir dosya kesilemiyor sürüm 1.0 Gdıplus hata nedeniyle oluşur. Resim dosya boyutları hakkında daha fazla bilgi için "References" bölümüne bakın.Örnek kod da anahtar güvensiz kullanır. Bayt değerlerini gösteren bir işaretçi piksel tanımları kaynaktan bit eşlem bit eşlem hedefe taşınır kodunu kullandığı için bunu yapar. Gerçek işaretçiler, yalnızca güvenli olmayan işaretlendi ve / unsafe derleyici seçeneği ile derlenmiş kod kullanılabilir. Bu şekilde yazılmış kod güvenlik impliciations vardır. Özellikle, böyle bir yönetilen kod izin istemek zorunda kalabilirsiniz ve güvenilir değil, başarısız olabilir. ReferanslarGIF codec piksel biçimleri hakkında ek bilgi için Microsoft Knowledge Base'deki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın: 318343
(http://support.microsoft.com/kb/318343/EN-US/
)
BILGI: GDI + GIF dosyaları, 8-BPP biçimi kullanarak kaydedilmiş olan Resim dosya boyutları hakkında ek bilgi için Microsoft Knowledge Base'deki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın: 312119
(http://support.microsoft.com/kb/312119/EN-US/
)
SORUN: Bit eşlem sınıf yöntemi Kaydet dosya boyutu Truncate Not Bu teknik, Microsoft Visual C++ kullanma hakkında ek bilgi için Microsoft Knowledge Base'deki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın: 315780
(http://support.microsoft.com/kb/315780/EN-US/
)
Nasıl YAPıLıR: GDI + kullanarak bir GIF yeni bir renk tablo ile birlikte Kaydet SözlükBPP bit / piksel - bit her bir pikselin sayısal görüntü renk değerini göstermek için kullanılır; fiziksel görüntüdeki her bir pikselin renk tanımlama düzenini açıklar. Genel ve generically başvurulan piksel biçimler 32 BPP 24 BPP, 16 BPP, 8 BPP, 4 BPP, 1 BPP içerir. 8 BPPTek bir bayt bulunan sekiz bit olarak ifade edilen görüntü piksel biçimi. Bayt değeri, fiili kırmızı-yeşil-mavi (RGB) rengi tanımlarını içeren bir renk tabloya dizin olarak kullanılır. Renk tablosu, dizin, tek bir bayt boyutunda olduğundan, 256 renge sınırlıdır. GIFGrafik Değişim Biçimi - CompuServe tarafından oluşturulan bir streamable resim dosyası biçimi. RGBKırmızı, yeşil ve mavi - genellikle her bayt ifade ve bir rengi 3 baytlı Üçlü ' neden olur. Bu makaledeki bilginin uygulandığı durum:
Otomatik TercümeÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir. Makalenin İngilizcesi aşağıdaki gibidir:319061
(http://support.microsoft.com/kb/319061/en-us/
)
| Diğer Kaynaklar Diğer Destek Siteleri
ToplulukHemen Yardım AlMakale çevirileri
|






Windows Live
Facebook
Twitter
Linkedin
Digg it
Yahoo
Delicious
StumbleUpon
Yammer
Reddit
Technorati
FriendFeed
Email


Üste