Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[VB .net] Afbeelding omzetten naar 1bpp BMP

Pagina: 1
Acties:

  • skate master
  • Registratie: September 2004
  • Laatst online: 21-11 09:07

skate master

Autodesk Educator Expert

Topicstarter
Mensen,

om de informatie van Kabels en Leidingen welke wij als PNG bestand binnen krijgen in AutoCAD te kunnen inladen heb ik een plugin gemaakt welke de PNG bestanden omzet naar DXF.
Deze plugin werkt uitstekend zolang de kleur van de lijnen in de afbeelding niet Oker of Paars zijn.
De output is dan namelijk een geheel witte BMP terwijl in alle overige gevallen de lijnen in het zwart worden weergegeven.

Via onderstaande functie zet ik de PNG om naar een 1bpp BMP. Deze BMP wordt vervolgens gevectoriseerd tot een DXF. Het programma dat het vectoriseren voor zijn rekening neemt accepteerd enkel een 1bpp BMP!

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Function ConvertPNG(strFile As String)
        Dim strFileOut As String = "C:\TEMP\" & Path.GetFileName(strFile) & ".bmp"

        Dim bmpTemp As Bitmap = System.Drawing.Image.FromFile(strFile)
        
        Dim bmp As Bitmap = bmpTemp.Clone(New Rectangle(0, 0, bmpTemp.Width, bmpTemp.Height), PixelFormat.Format32bppRgb)
        Dim bmpNew As Bitmap = bmp.Clone(New Rectangle(0, 0, bmpTemp.Width, bmpTemp.Height), PixelFormat.Format1bppIndexed)

        bmp = Nothing
        bmpNew.Save(strFileOut, ImageFormat.Bmp)
        bmpNew = Nothing
        'start conversie naar DXF
        If generateDXF(strPathInput, "C:\TEMP\", strFileOut) = True Then
            'OK
            convSuccess = "C:\TEMP\" & Path.GetFileNameWithoutExtension(strFileOut) & ".dxf"
            modFunctions.writeLOGtxt("DXF voor " & strFile & " succesvol")
        Else
            MsgBox("Fout bij het vectoriseren van " & strFileOut)
            convSuccess = "fout"
        End If
        'geconverteerd bestand verwijderen
        If File.Exists(strFileOut) Then
            File.Delete(strFileOut)
        End If
        Return convSuccess

    End Function


Als alternatief op bovenstaande functie heb ik een functie gemaakt welke de afbeelding pixel voor pixel doorloopt en zo alle pixels welke een andere kleur dan wit hebben op zwart zet.
Dit werkt prima, maar is alleen erg traag.

Is er iemand wie mij kan vertellen waarom het bij 2 specifieke kleuren misgaat of een mogelijk alternatief weet om de afbeeldingen om te zetten naar zwart-wit?

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
In wezen zou ik zeggen : Pixel voor pixel doen, want wat je wilt is redelijk custom.

Je library doet gewoon een standaard omzetting waarbij alles boven een bepaalde grenswaarde naar zwart gaat en alles daaronder naar wit waarbij dan blijkbaar oker en paars onder de grenswaarden vallen.

In wezen is wat je nu doet niet zozeer een conversie (waarbij je meestal nog wel opties hebt) maar meer : Pers zoveel mogelijk in een compleet andere kleurspace. Het werkt, maar het geeft over het algemeen nul flexibiliteit.

Maar pixel voor pixel is in principe ook niet langzaam (bmp.clone moet het ook pixel voor pixel doen namelijk) alleen ik vermoed dat je gewoon ergens een verkeerde methodiek hanteert waardoor het supertraag wordt.

  • P-Storm
  • Registratie: September 2006
  • Laatst online: 21-11 15:56
Lockbits is een snellere manier om het op te pakken, maar veel meer behalve DirectX/OpenGL/C++ zie ik het niet al te snel worden.*

offtopic:
*=Wat ik in 5 seconden zo kan bedenken :)

  • epic007
  • Registratie: Februari 2004
  • Laatst online: 17-11 15:31
skate master schreef op maandag 08 september 2014 @ 17:17:
Is er iemand wie mij kan vertellen waarom het bij 2 specifieke kleuren misgaat of een mogelijk alternatief weet om de afbeeldingen om te zetten naar zwart-wit?
Nee, want we weten niet welk programma je gebruikt voor het vectoriseren. Daar gaat het mis met kleurenplaatjes.

  • Acid_Burn
  • Registratie: Augustus 2001
  • Laatst online: 02:58

Acid_Burn

uhuh

Kan in het programma dat je gebruikt om er een 1BBP van te maken niet een threshold/drempelwaarde opgeven? Misschien moet je die eens verlagen.

Glass Eye Photography | Zelfbouw wireless fightstick | Mijn puzzel site


  • skate master
  • Registratie: September 2004
  • Laatst online: 21-11 09:07

skate master

Autodesk Educator Expert

Topicstarter
Ik heb het probleem voorlopig getackeld door de conversie op de manier te doen zoals beschreven op de volgende website: http://bobpowell.net/onebit.aspx

Dit werkt voorlopig voldoende, nu maar eens verder verdiepen in de Lockbits om te zien of we het process nog kunnen optimaliseren / versnellen.
Pagina: 1