Rozdělění obrázku na několik Bitmap   zodpovězená otázka

VB.NET

Zdravím,

mám plně grafickou aplikaci. Její vizuální stránku jsem zatím řešil tak, že jsem si vytvořil několik obrázků, ale rád bych použil jeden soubor a roztříhal ho na několik malých bitmap. S grafikou nemám moc zkušeností, takže to jistě půjde snadno.

Předem díky

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Snad třeba takto, ukázka jen pro jednu část z obrázku

  ' nová bitmapa např. z "obrazek.jpg" v resource:
  Dim obr As New Bitmap(My.Resources.obrazek)
  ' vybrat část obrázku (zdroj začíná na 0,0)
  ' vybírám z něho obdélník x=100, y=20, width=100, height=200:
  Dim zdrojR As New Rectangle(100, 20, 100, 200)
  ' umístění části obrázku a jeho rozměry
  ' (rozměry cílového obrázku lze i změnit):
  Dim cilR As New Rectangle(10, 10, 100, 200)
  ' vykreslit vybranou část obrázku, např. na formulář:
  Me.CreateGraphics.DrawImage(obr, cilR, zdrojR, GraphicsUnit.Pixel)

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Myslím, že kód pana Rennera pokryje moje potřeby dokonale.

Děkuji Vám oběma.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Pokud Vám jde o možnost ty "rozstříhané" bitmapy mít v samostatných objektech, abyste s nimi mohl následně pracovat, zkuste třeba toto (je to celkem jednoduché, tak jsem to neokomentovával, pokud něco nebude jasné, klidně se ozvěte):

Public Class Form1
    Dim poleObrazku(,) As Bitmap
    Dim sourceBitmap As Bitmap

    Private Sub rozdelObrazky(ByVal pocetX As Integer, ByVal pocetY As Integer)
        ReDim poleObrazku(pocetX-1, pocetY-1)
        Dim X0, Y0, width, height As Integer
        sourceBitmap = New Bitmap("d:\obr.jpg")
        For x As Integer = 0 To pocetX - 1
            X0 = x / pocetX * sourceBitmap.Width
            width = (x + 1) / pocetX * sourceBitmap.Width - X0
            For y As Integer = 0 To pocetY - 1
                Y0 = y / pocetY * sourceBitmap.Height
                height = (y + 1) / pocetY * sourceBitmap.Height - Y0

                poleObrazku(x, y) = sourceBitmap.Clone(New Rectangle(X0, Y0, width, height), sourceBitmap.PixelFormat)
            Next
        Next
    End Sub

    Private Sub tiskniObrazky(ByVal mezera As Integer)
        Dim x, y As Integer

        Dim g As Graphics = Me.CreateGraphics

        x = 0
        y = 0
        For i As Integer = 0 To poleObrazku.GetLength(0) - 1
            For j As Integer = 0 To poleObrazku.GetLength(1) - 1
                g.DrawImage(poleObrazku(i, j), x, y)
                y += poleObrazku(i, j).Height + mezera
            Next
            x += poleObrazku(i, 0).Width + mezera
            y = 0
        Next
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        rozdelObrazky(2, 5)
        tiskniObrazky(2)
    End Sub
End Class

Samozřejmě, Vámi popsaný problém řeší pouze ta první metoda, vše ostatní je tam pouze pro demonstraci funkčnosti.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback