CARA: Menyimpan .gif File dengan tabel warna baru dengan menggunakan Visual Basic.NET

Terjemahan Artikel Terjemahan Artikel
ID Artikel: 319591 - Melihat produk di mana artikel ini berlaku.
Perbesar semua | Perkecil semua

Pada Halaman ini

RINGKASAN

CompuServe Graphics Interchange Format (GIF) adalah dirancang dengan maksimum 256 warna yang disusun dalam tabel warna. Pada membuat modifikasi umum .gif file gambar, Anda harus mengubah warna kustom tabel. Namun, ketika System.Drawing suntingan Gambar objek dan kemudian diminta untuk menyimpan gambar dengan GIF encoder, file .gif yang dihasilkan berisi tabel warna halftone.

Untuk menyimpan Gambar dengan tabel warna kustom dengan menggunakan GIF encoder, Anda harus bekerja dengan salinan 256-warna Gambar yang System.Drawing tidak diubah.

Memahami file .gif yang ditulis oleh System.Drawing dan GDI +

File gambar .gif dapat mengekspresikan maksimum 256 warna. Karena warna adalah sumber daya yang langka di .gif file, mengoptimalkan mereka warna adalah tugas yang sering diminta. Mempengaruhi tabel warna dioptimalkan, Anda harus mampu mengatur setiap tabel warna kustom yang sewenang-wenang dalam .gif file.

The System.Drawing namespace adalah terutama bungkus sekitar GDI +, oleh karena itu ini Artikel merujuk namespace sebagai GDI + kecuali perilaku yang khusus untuk System.Drawing namespace dibahas. Dalam kasus ini, istilah System.Drawing digunakan.

Setelah GDI + memodifikasi Gambar, dan kemudian menulis sebuah gambar ke file dengan menggunakan GIF encoder, GDI + menulis file dengan menggunakan halftone palet yang Gambar bit objek telah warna berkurang. GDI + Apakah warna konversi dari 32 bit per piksel (32 BPP) ketika menulis gambar ke file karena semua modifikasi untuk gambar yang dibuat dengan GDI + 32-BPP grafis mesin.

Meskipun GDI + mendukung penciptaan Gambar dan Bitmaps berbagai piksel format dan oleh karena itu dapat memuat gambar .gif, penggunaan mesin grafis 32-BPP memerlukan konversi untuk 32 BPP ketika mereka diubah oleh GDI +. Namun, Gambar atau Bitmap Yaitu tidak diubah oleh GDI + mempertahankan format piksel yang asli dan dapat ditulis ke file menggunakan Simpan metode dengan encoder sesuai. Bentuk properti ini dasar untuk teknik yang dapat menyimpan Gambar untuk file .gif dengan warna kustom tabel.

Menulis .gif File dengan tabel warna kustom

Anda dapat menulis dimodifikasi Bitmap dengan GIF encoder dan tetap Bitmap Tabel warna utuh; oleh karena itu, Anda dapat menggunakan metode ini untuk menyimpan file .gif dengan tabel warna baru.

Metode adalah untuk menyalin gambar data dari asli Gambar objek untuk sementara Bitmap objek. Sementara ini Bitmap diciptakan sebagai 8-BPP diindeks Bitmap. Ini adalah format piksel yang digunakan untuk menyimpan .gif file. The Bitmap Tabel warna diatur dengan menggunakan SetPalette metode, dan kemudian definisi gambar disalin ke sementara Bitmap. Setelah Anda membuat sementara Bitmap dengan definisi duplikat, Anda dapat menggunakan Save() metode untuk menyimpan dengan GIF encoder, yang melindungi 8-BPP Tabel warna.

Untuk menuliskan citra .gif ke file dengan warna kustom tabel, ikuti langkah berikut:
  1. Membuat duplikat Bitmap objek yang adalah ukuran yang sama sebagai sumber Gambar.
  2. Mengatur daftar warna kustom Bitmap objek untuk tabel warna yang Anda inginkan.
  3. Penggunaan LockBits metode untuk mendapatkan akses menulis ke bit gambar Salin.
  4. Menciptakan definisi gambar dalam salinan dengan menulis warna indeks untuk memori yang Diperoleh dari LockBits yang duplikat pixels di asli Gambar.
  5. Penggunaan UnLockBits untuk melepaskan bit gambar.
  6. Penggunaan Bitmap salinan dengan tabel warna kustom untuk menyimpan Gambar untuk file dengan menggunakan Simpan dan GIF encoder.
  7. Rilis Bitmap salinan Gambar.

Menggunakan contoh kode

Kode contoh dalam artikel ini menunjukkan bagaimana untuk menggunakan Bitmap.Save untuk menulis file .gif dengan tabel warna kustom ukuran sewenang-wenang.

Contoh fungsi mengambil empat parameter berikut:
  • Setiap GDI + Gambar objek.
  • Nama file untuk file tujuan.
  • Jumlah warna untuk .gif file.
  • Bendera yang menunjukkan Apakah warna transparan diperlukan.
Fungsi pertama menciptakan Bitmap objek yang memiliki format piksel PixelFormat.Format8BPPIndexed karena itulah objek yang disimpan untuk membuat .gif file dengan nColors. Selanjutnya, palet warna dengan warna kustom dibuat. The .gif file memperoleh ukuran dan entri khusus untuk para tabel warna dari Bitmap objek ColorPalette. Contoh kode menciptakan skala abu-abu untuk keperluan demonstrasi karena algoritma yang mudah untuk memperluas atas berbagai tabel warna ukuran.

Untuk membuat .gif file, Anda harus menginisialisasi 8 BPP Bitmap objek dengan definisi gambar yang ditulis untuk file. Dalam kode contoh, serangkaian tengah loop digunakan untuk warna mengkonversi gambar masuk pada dasarnya hitam dan putih TV warna ruang.

Untuk keperluan demonstrasi, piksel gambar sumber yang diakses melalui The GetPixel() metode Bitmap objek yang adalah salinan dari gambar sumber. A Bitmap salinan dibuat karena Gambar kelas tidak melaksanakan GetPixel() metode.

Anda dapat menggunakan teknik lain untuk mengakses piksel, seperti langsung akses ke piksel dengan menggunakan LockBits() metode atau interop dengan asli kode tidak dikelola dengan menggunakan Windows GDI DIB bagian. Ketika Anda menggunakan BitBlt fungsi untuk menyalin suatu bitmap dari Gdi + HDC ke bagian DIB GDI kontroler domain memori, GBitBlt fungsi menggunakan Pencocokan kemampuan GDI warna.

Karena Visual Basic.NET bahasa tidak dapat mengakses memori buffer langsung oleh berarti pointer bahasa lain, langkah antara diperlukan. Kode ini menciptakan bekerja Byte penyangga yang ditempatkan indeks warna dengan warna konversi loop. Penyangga ini adalah struktur data yang dikelola unsur-unsur yang dapat dimanipulasi oleh Visual Basic.Kode bersih. Setelah indeks warna gambar defitions ditempatkan dalam buffer ini, interop layanan digunakan untuk memanggil RtlMoveMemory Fungsi sistem operasi untuk mentransfer isi ini Byte buffer ke buffer memori yang direkomendasikan oleh Scan0 IntPtr dari BitmapData objek.

The Win32API kelas yang didefinisikan dalam kode contoh menunjukkan bagaimana menentukan dan menggunakan fungsi sistem operasi tidak dikelola dengan menggunakan.NET Framework Interop layanan. RtlMoveMemory dinyatakan oleh kelas ini harus CopyArrayTo metode. Metode ini didefinisikan Marsekal Visual sesuai Dasar.Tipe data bersih ke parameter sesuai untuk RtlMoveMemory. CopyArrayTo oleh karena itu mengambil sumber Byte array dalam parameter kedua dan menyalin isi Byte array memori yang menunjuk pada oleh nilai pertama parameter yang didefinisikan sebagai Int32. Parameter pertama untuk CopyArrayTo adalah System.Int32 Ketik karena itulah jenis nilai yang dapat diperoleh dari IntPtr kelas.

Setelah Anda membuat Bitmap menyalin, menggunakan Simpan metode dengan ImageFormat.Gif objek untuk menulis bitmap ke tujuan file.

GIF file dengan kurang dari 256 warna

GIF codec dalam GDI + versi 1.0 encode hanya GDI + Gambar yang 8 BPP. Lainnya Gambar format diubah sebelum encoding. Kode ini menggunakan 8-BPP Bitmap format untuk menulis file .gif yang memiliki kurang dari 256 warna karena GIF codec mengakui 8-BPP Bitmap objek yang berisi lebih dari 256 warna oleh Palette.Count properti.

Untuk informasi lebih lanjut tentang GIF codec, Lihat "Referensi"bagian dari Artikel ini.

Sayangnya, ColorPalette kelas System.Drawing namespace dalam.NET Framework tidak dapat instantiated independen Bitmap objek. Ini adalah pembatasan yang hanya System.Drawing.bitmap kelas membebankan di.NET Framework; Namun, untuk menggunakan pendekatan pada artikel ini, Bitmap objek harus baru ColorPalette objek yang berisi warna lebih sedikit daripada default 256 ColorPalette.

Untuk mencapai hal ini, kode contoh mendefinisikan fungsi bernama GetColorPalette. Fungsi ini menciptakan sementara Bitmap objek yang memiliki kedalaman warna dekat dengan jumlah diminta warna. Fungsi kemudian referensi Palet properti dan kembali ke pemanggil. Ini menciptakan baru ColorPalette dengan salah satu dari beberapa warna mungkin penting: 256 warna, warna 16, atau dua warna (monokrom). Meskipun Anda dapat membuat tabel warna dalam file .gif yang lebih kecil dari 256 warna, warna tabel dibatasi untuk ukuran yang kekuatan dua.

Ketika Anda membatasi ukuran tabel warna untuk kekuatan dua, Anda meminimalkan ruang kosong. Tabel warna yang dihasilkan dalam contoh ini adalah 8 warna (2 x 2 x 2). Dengan kode contoh, .gif file akan dibuat dengan warna tabel warna 16 karena itulah yang terkecil PixelFormat untuk Bitmap yang mengakomodasi enam warna.

Kode dalam pengolahan loop yang salinan gambar pixel definisi untuk 8-BPP Bitmap memperhitungkan ukuran pelat ketika kode menghitung Sebuah pixel indeks nilai. GIF codec membatasi ukuran pelat dan membatasi definisi gambar untuk nilai-nilai indeks yang kompatibel dengan palet ukuran (yaitu potensi GIF tabel warna), dan oleh karena itu dapat membuat file .gif dengan kurang dari 256 warna.

GIF transparansi

Dalam kode contoh, ColorPalette penciptaan rutin set pertama masuk menjadi GIF transparan warna untuk menunjukkan penggunaan fitur transparansi. Kode ini dilakukan dengan pengaturan komponen Alpha Warna masuk ke NOL. Kode contoh dalam artikel ini untuk demonstrasi tujuan hanya, karena warna transparansi yang sewenang-wenang pilihan dan mungkin memiliki hasil yang tidak diharapkan yang bergantung sepenuhnya pada sumber Gambar.

GIF encoder mengidentifikasi warna pertama di ColorPalette yang memiliki Alpha nilai nol sebagai warna transparan. Ini berarti bahwa warna transparan tidak harus entri pertama di ColorPalette. Ini dapat menjadi salah satu mungkin 256 warna dalam palet, pada kondisi yang berisi semua entri sebelumnya Alpha komponen dengan nilai-nilai bukan nol. Setiap entri kemudian dengan Alpha komponen nilai nol diabaikan. Semua entri yang bukan nol Alpha komponen dianggap buram.

GIF/LZW lisensi masalah

Microsoft telah memperoleh lisensi dari Unisys untuk menggunakan .gif file format dan teknologi LZW lainnya yang dilindungi oleh milik Unisys AS dan asing paten di sejumlah produk Microsoft. Namun, lisensi ini Apakah tidak sampai meluas ke pengembang pihak ketiga yang menggunakan Microsoft pengembangan produk atau toolkit untuk mengembangkan aplikasi. Sebagai pengembang pihak ketiga, Anda harus menentukan apakah Anda harus memperoleh izin dari Unisys menggunakan .gif format atau teknologi LZW.

Untuk tambahan informasi tentang LZW lisensi dan GIF, klik nomor artikel di bawah ini untuk melihat artikel di dalam Basis Pengetahuan Microsoft:
193543 INFO: Unisys GIF dan informasi lisensi teknologi LZW

Contoh kode

Imports System.Drawing
Imports System.Drawing.Imaging
Imports System.Runtime.InteropServices



Public Class Form1
    Inherits System.Windows.Forms.Form

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Dim pic As Image = Image.FromFile("test.jpg")

        SaveGIFWithNewColorTable(pic, "test.gif", 16, True)

    End Sub

    Class Win32API

        <DllImport("KERNEL32.DLL", EntryPoint:="RtlMoveMemory", _
           SetLastError:=True, CharSet:=CharSet.Auto, _
           ExactSpelling:=True, _
           CallingConvention:=CallingConvention.StdCall)> _
        Public Shared Sub CopyArrayTo(<[In](), MarshalAs(UnmanagedType.I4)> ByVal hpvDest As Int32, <[In](), Out()> ByVal hpvSource() As Byte, ByVal cbCopy As Integer)
            ' Leave function empty - DLLImport attribute forwards calls to CopyArrayTo to
            ' RtlMoveMemory in KERNEL32.DLL.
        End Sub


    End Class

    Private Function GetColorPalette(ByVal nColors As Integer) As ColorPalette
        ' Assume monochrome image.
        Dim bitscolordepth As PixelFormat = PixelFormat.Format1BppIndexed
        Dim palette As ColorPalette 'The Palette we are stealing
        Dim bitmap As Bitmap        'The source of the stolen palette

        ' Determine number of colors.
        If nColors > 2 Then
            bitscolordepth = PixelFormat.Format4BppIndexed
        End If
        If (nColors > 16) Then
            bitscolordepth = PixelFormat.Format8BppIndexed
        End If

        ' Make a new Bitmap object to get its Palette.
        bitmap = New Bitmap(1, 1, bitscolordepth)

        palette = bitmap.Palette    ' Grab the palette

        bitmap.Dispose()            ' cleanup the source Bitmap

        Return palette              ' Send the palette back
    End Function


    Private Sub SaveGIFWithNewColorTable(ByVal image As Image, ByVal filename As String, ByVal nColors As Integer, ByVal fTransparent As Boolean)

        ' GIF codec supports 256 colors maximum, monochrome minimum.
        If (nColors > 256) Then
            nColors = 256
        End If
        If (nColors < 2) Then
            nColors = 2
        End If


        ' Make a new 8-BPP indexed bitmap that is the same size as the source image.
        Dim Width As Integer = image.Width
        Dim Height As Integer = image.Height

        ' Always use PixelFormat8BppIndexed because that is the color
        ' table based interface to the GIF codec.
        Dim bitmap As Bitmap = New Bitmap(Width, Height, PixelFormat.Format8BppIndexed)

        ' Create a color palette big enough to hold the colors you want.
        Dim pal As ColorPalette = GetColorPalette(nColors)

        ' Initialize a new color table with entries that are determined
        ' by some optimal palette-finding algorithm; for demonstration 
        ' purposes, use a grayscale.
        Dim i As Integer
        For i = 0 To nColors - 1
            Dim Alpha As Integer = 255             ' Colors are opaque
            Dim Intensity As Double = CDbl(i) * 255 / (nColors - 1) ' even distribution 

            ' The GIF encoder makes the first entry in the palette
            ' with a ZERO alpha the transparent color in the GIF.
            ' Pick the first one arbitrarily, for demonstration purposes.

            If (i = 0 And fTransparent) Then    ' Make this color index...
                Alpha = 0                       ' Transparent
            End If

            ' Create a gray scale for demonstration purposes.
            ' Otherwise, use your favorite color reduction algorithm 
            ' and an optimum palette for that algorithm generated here.
            ' For example, a color histogram, or a median cut palette.
            pal.Entries(i) = Color.FromArgb(Alpha, Intensity, Intensity, Intensity)

        Next i

        ' Set the palette into the new Bitmap object.
        bitmap.Palette = pal


        ' Use GetPixel below to pull out the color data of
        ' image because GetPixel isn't defined on an Image; make a copy 
        ' in a Bitmap instead. Next, make a new Bitmap that is the same 
        ' size as the image that you want to export. Or, try to interpret
        ' the native pixel format of the image by using a LockBits
        ' call. Use PixelFormat32BppARGB so you can wrap a graphics  
        ' around it.
        Dim BmpCopy As Bitmap = New Bitmap(Width, Height, PixelFormat.Format32BppArgb)

        Dim g As Graphics
        g = Graphics.FromImage(BmpCopy)

        g.PageUnit = GraphicsUnit.Pixel

        ' Transfer the Image to the Bitmap.
        g.DrawImage(image, 0, 0, Width, Height)

        ' Force g to release its resources, namely BmpCopy.
        g.Dispose()

        ' Lock a rectangular portion of the bitmap for writing.
        Dim bitmapData As BitmapData
        Dim rect As Rectangle = New Rectangle(0, 0, Width, Height)

        bitmapData = bitmap.LockBits(rect, ImageLockMode.WriteOnly, PixelFormat.Format8BppIndexed)

        ' Write to a temporary buffer, and then copy to the buffer that
        ' LockBits provides. Copy the pixels from the source image in this
        ' loop. Because you want an index, convert RGB to the appropriate
        ' palette index here.
        Dim pixels As IntPtr = bitmapData.Scan0
        Dim bits As Byte()      ' the working buffer

        ' Get the pointer to the image bits.
        Dim pBits As Int32

        If (bitmapData.Stride > 0) Then
            pBits = pixels.ToInt32()
        Else
            ' If the Stide is negative, Scan0 points to the last
            ' scanline in the buffer. To normalize the loop, obtain
            ' a pointer to the front of the buffer that is located 
            ' (Height-1) scanlines previous.
            pBits = pixels.ToInt32() + bitmapData.Stride * (Height - 1)
        End If

        Dim stride As Integer = Math.Abs(bitmapData.Stride)
        ReDim bits(Height * stride) ' Allocate the working buffer.

        Dim row As Integer
        Dim col As Integer

        For row = 0 To Height - 1
            For col = 0 To Width - 1
                ' Map palette indices for a gray scale.
                ' Put your favorite color reduction algorithm here.
                ' If you use some other technique to color convert.
                Dim pixel As Color      ' The source pixel.

                ' The destination pixel.
                Dim i8BppPixel As Integer = row * stride + col

                pixel = BmpCopy.GetPixel(col, row)

                ' Use luminance/chrominance conversion to get grayscale.
                ' Basically, turn the image into black and white TV.
                ' Do not calculate Cr or Cb because you 
                ' discard the color anyway.
                ' Y = Red * 0.299 + Green * 0.587 + Blue * 0.114

                ' This expression should be integer math for performance;
                ' however, because GetPixel above is the slowest part of 
                ' this loop, the expression is left as floating point
                ' for clarity.
                Dim luminance As Double = (pixel.R * 0.299) + _
                                    (pixel.G * 0.587) + _
                                    (pixel.B * 0.114)

                ' Gray scale is an intensity map from black to white.
                ' Compute the index to the grayscale entry that
                ' approximates the luminance, and then round the index.    
                ' Also, constrain the index choices by the number of
                ' colors to do, and then set that pixel's index to the byte
                ' value.
                Dim colorIndex As Double = Math.Round((luminance * (nColors - 1) / 255))

                bits(i8BppPixel) = CByte(colorIndex)

                ' /* end loop for col */ 
            Next col
            ' /* end loop for row */ 
        Next row

        ' Put the image bits definition into the bitmap.
        Win32API.CopyArrayTo(pBits, bits, Height * stride)

        ' To commit the changes, unlock the portion of the bitmap. 
        bitmap.UnlockBits(bitmapData)

        bitmap.Save(filename, ImageFormat.Gif)

        ' Bitmap goes out of scope here and is also marked for
        ' garbage collection.
        ' Pal is referenced by bitmap and goes away.
        ' BmpCopy goes out of scope here and is marked for garbage
        ' collection. Force it, because it is probably quite large.
        ' The same applies for bitmap.
        BmpCopy.Dispose()
        bitmap.Dispose()

    End Sub

End Class

				

Tentang contoh kode

Microsoft menyediakan pemrogaman hanya untuk ilustrasi, tanpa garansi baik tersurat maupun tersirat, termasuk, namun tidak terbatas pada, jaminan tersirat mengenai keadaan yang dapat diperjualbelikan dan/atau kesesuaian untuk tujuan tertentu. Artikel ini mengasumsikan bahwa Anda sudah familiar dengan bahasa pemrograman yang ditunjukkan dan alat-alat yang digunakan untuk membuat dan memperbaiki prosedur. Profesional dukungan Microsoft dapat membantu menjelaskan fungsionalitas prosedur tertentu, tetapi mereka tidak akan mengubah contoh tersebut untuk menyediakan fungsionalitas tambahan atau membuat prosedur untuk memenuhi kebutuhan spesifik Anda.
Jika Anda memiliki terbatas pengalaman pemrograman, Anda mungkin ingin menghubungi Microsoft Certified Partner atau Microsoft Advisory Services. Untuk informasi lebih lanjut, kunjungi situs Web Microsoft ini:

Microsoft Certified Partner- https://Partner.Microsoft.com/global/30000104

Microsoft Advisory Services- http://support.Microsoft.com/GP/advisoryservice

Untuk informasi lebih lanjut tentang opsi dukungan yang tersedia dan tentang cara menghubungi Microsoft, kunjungi Website Microsoft berikut:http://support.Microsoft.com/default.aspx?scid=Fh;EN-US;CNTACTMS

Pemecahan Masalah

Ketika Anda menggunakan kode ini untuk menimpa file yang ada, Anda mungkin melihat masalah dengan ukuran file yang dihasilkan. Hal ini terjadi karena bug dalam GDI + versi 1.0 yang tidak memotong file. Untuk informasi selengkapnya tentang Ukuran file gambar, lihat bagian "Referensi".



REFERENSI

Untuk informasi tambahan tentang GIF codec piksel format, klik nomor artikel di bawah ini untuk melihat artikel di dalam Basis Pengetahuan Microsoft:
318343 INFO: GDI + GIF file yang disimpan menggunakan 8-BPP Format
Untuk informasi tambahan tentang ukuran file gambar, klik nomor artikel di bawah ini untuk melihat artikel di dalam Basis Pengetahuan Microsoft:
312119 PRB: Simpan metode Bitmap kelas tidak memotong ukuran File
Untuk informasi tambahan tentang menulis file GIF kustom menggunakan Visual C++ dan Visual C#, klik nomor artikel di bawah ini untuk melihat artikel di Microsoft Basis Pengetahuan:
315780 HOWTO: Menyimpan GIF dengan tabel warna baru dengan menggunakan GDI +
319061 CARA: Menyimpan GIF dengan tabel warna baru dengan menggunakan Visual C#

Daftar Kata

BPP
bit per pixel - jumlah bit yang digunakan untuk mewakili nilai warna setiap pixel dalam sebuah gambar digital; menjelaskan tata letak fisik definisi warna setiap pixel dalam sebuah gambar. Umum dan umum direferensikan piksel format termasuk 32 BPP, 24 BPP, 16 BPP, 8 BPP, 4 BPP, 1 BPP.
8 BPP
Piksel format gambar yang dinyatakan sebagai delapan bit yang terkandung dalam satu byte. Byte nilai digunakan sebagai indeks ke tabel warna yang berisi sebenarnya merah hijau biru (RGB) warna definisi. Karena indeks adalah satu byte dalam ukuran, tabel warna terbatas pada 256 warna.
GIF
Graphics Interchange Format - format file gambar streamable yang dibuat oleh CompuServe.
RGB
Merah, hijau dan biru - masing-masing biasanya dinyatakan sebagai byte, dan menghasilkan warna 3-byte triplet.

Properti

ID Artikel: 319591 - Kajian Terakhir: 24 September 2011 - Revisi: 2.0
Berlaku bagi:
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Windows XP Professional
Kata kunci: 
kbdswgdi2003swept kbgdipimaging kbgdiplus kbhowtomaster kbmt KB319591 KbMtid
Penerjemahan Mesin
PENTING: Artikel ini diterjemahkan menggunakan perangkat lunak mesin penerjemah Microsoft dan bukan oleh seorang penerjemah. Microsoft menawarkan artikel yang diterjemahkan oleh seorang penerjemah maupun artikel yang diterjemahkan menggunakan mesin sehingga Anda akan memiliki akses ke seluruh artikel baru yang diterbitkan di Pangkalan Pengetahuan (Knowledge Base) dalam bahasa yang Anda gunakan. Namun, artikel yang diterjemahkan menggunakan mesin tidak selalu sempurna. Artikel tersebut mungkin memiliki kesalahan kosa kata, sintaksis, atau tata bahasa, hampir sama seperti orang asing yang berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab terhadap akurasi, kesalahan atau kerusakan yang disebabkan karena kesalahan penerjemahan konten atau penggunaannya oleh para pelanggan. Microsoft juga sering memperbarui perangkat lunak mesin penerjemah.
Klik disini untuk melihat versi Inggris dari artikel ini:319591

Berikan Masukan

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com