vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Schützen Sie Ihre Software vor Software-Piraterie - mit sevLock 1.0 DLL!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Bildausschnitt: Farbtiefe 8 Bit (Indexed, Palette) 
Autor: Manfred X
Datum: 04.08.11 09:16

Hallo!

So geht es!
Public Sub Pic8IndexedCut(ByVal Bilddatei_in As String, _
                          ByVal Bilddatei_out As String, _
                 Optional ByVal cutrectangle As Rectangle = Nothing)
 
    Dim x, y As Integer ' Loop
    Dim Byte_In_Index, Byte_Out_Index As Integer
 
    If IO.Path.GetExtension(Bilddatei_out).ToUpper <> ".TIF" Then
            Throw New ArgumentException _
                      ("Ausgabedatei: keine TIF-Extension")
    End If
 
    ' Bitmap aus Datei laden
    Dim bmp_in As New Drawing.Bitmap(Bilddatei_in)
    If bmp_in.PixelFormat <> Imaging.PixelFormat.Format8bppIndexed Then
       Throw New ArgumentException _
               ("Quelldatei liefert keine 8BitIndexed-Bitmap")
    End If
 
    If cutrectangle = Nothing Then
       cutrectangle = New Rectangle _
                (0, 0, bmp_in.Width, bmp_in.Height)
    End If
 
    With cutrectangle
       If .Left < 0 Or .Top < 0 Or .Left + .Width > bmp_in.Width Or _
          .Top + .Height > bmp_in.Height Then
          Throw New ArgumentException _
                  ("Ausschnitt-Rechteck ausserhalb Quell-Bitmap")
       End If
    End With
 
    Dim bmp_in_data As New Imaging.BitmapData, bmp_in_array(0) As Byte
    Dim bmp_in_ptr As IntPtr = LockBits(bmp_in, bmp_in_data, bmp_in_array)
 
    ' Die Bitmapdaten in das Array kopieren
    Runtime.InteropServices.Marshal.Copy _
            (bmp_in_ptr, bmp_in_array, 0, bmp_in_array.Length)
 
    'Ausgabe-Bitmap für Ausschnitt erstellen
    Dim bmp_out As New Bitmap _
         (cutrectangle.Width, cutrectangle.Height, bmp_in.PixelFormat)
 
    Dim bmp_out_data As New Imaging.BitmapData, bmp_out_array(0) As Byte
    Dim bmp_out_ptr As IntPtr = LockBits _
            (bmp_out, bmp_out_data, bmp_out_array)
 
    bmp_out.Palette = bmp_in.Palette
    bmp_out.SetResolution _
        (bmp_in.HorizontalResolution, bmp_in.VerticalResolution)
 
    ' Bildausschnitt übertragen
    With cutrectangle
       Dim outline As Integer = -1
       For y = .Top To .Top + .Height - 1
           Dim sy As Integer = y * bmp_in_data.Stride
           outline += 1
           Byte_Out_Index = outline * bmp_out_data.Stride - 1
           For x = .Left To .Left + .Width - 1
               Byte_In_Index = sy + x
               Byte_Out_Index += 1
               bmp_out_array(Byte_Out_Index) = bmp_in_array(Byte_In_Index)
           Next x
       Next y
    End With
 
    ' Die modifizierten Arraydaten  in die Ausgabe-Bitmap kopieren
    Runtime.InteropServices.Marshal.Copy _
            (bmp_out_array, 0, bmp_out_ptr, bmp_out_array.Length)
 
    ' Die gesperrten Bilddaten im Speicher wieder freigeben
    bmp_in.UnlockBits(bmp_in_data)
    bmp_out.UnlockBits(bmp_out_data)
 
    'TIFF speichern
    Dim EncoderParameters As New Drawing.Imaging.EncoderParameters(1)
    EncoderParameters.Param(0) =  _
              New Drawing.Imaging.EncoderParameter( _
              Drawing.Imaging.Encoder.Compression, _
              Fix(Drawing.Imaging.EncoderValue.CompressionNone))
 
    bmp_out.Save(Bilddatei_out, EncoderInfo("TIFF"), EncoderParameters)
    bmp_in.Dispose() : bmp_out.Dispose()
 
End Sub
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Bild bearbeiten -> Alle Eigenschaften beibehalten2.099SeaStorm03.08.11 09:20
Re: Bild bearbeiten -> Alle Eigenschaften beibehalten1.501Manfred X03.08.11 15:00
Re: Bild bearbeiten -> Alle Eigenschaften beibehalten1.496Manfred X03.08.11 15:44
Re: Bild bearbeiten -> Alle Eigenschaften beibehalten1.522SeaStorm03.08.11 16:42
Re: Bild bearbeiten -> Alle Eigenschaften beibehalten1.532Manfred X03.08.11 17:06
Bildausschnitt: Farbtiefe 8 Bit (Indexed, Palette)1.652Manfred X04.08.11 09:16
Hilfsfunktionen1.515Manfred X04.08.11 09:17
Re: Bild bearbeiten -> Alle Eigenschaften beibehalten1.479SeaStorm05.08.11 07:53

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel