Avatar billede thewizard Nybegynder
13. februar 2008 - 12:28 Der er 4 kommentarer og
2 løsninger

3000 transparent pictures

Titel siger faktisk alt :). Jeg prøver at finde den hurtigste metode, at gøre 3000 billeder (som alle befinder sig som array af picture1) transparent, dvs. 50% gennemsigtighed.

Den er lidt tuff, prøv at komme med nogen ideer. Har søgt lidt på planet source code, og kommet op med et par løsninger, men ved ikk hvilken er bedst, ressource-mæssigt (hvilket er rimelig vigtigt med 3000 af slagsen).
Avatar billede Slettet bruger
13. februar 2008 - 12:51 #1
hvis du downloader ImageMagic, som er en commandline Tool og kan afvikles som en batch eller inlejres i en ShellExecute i et VB program, får du hurtigt gjort 3000 billeder tranparente.
Avatar billede thewizard Nybegynder
13. februar 2008 - 13:56 #2
Alle 3000 billeder skal vises på formen, og ikke bare konverteres :). De bruges inde i programmet.
Avatar billede Slettet bruger
13. februar 2008 - 14:13 #3
Hvis det udelukkende er gif filer kan du lige vende en byte i filen på det rigtige sted.
Se http://www.onicos.com/staff/iz/formats/gif.html
under "Graphic Control Extension Block" og angive den transparante farve i "Transparent Color Index"

Det skulle være til at finde ud af.
Avatar billede thewizard Nybegynder
14. februar 2008 - 01:24 #4
Og hvordan ville koden se ud? ;).
Avatar billede Slettet bruger
14. februar 2008 - 10:29 #5
Tja godt spørgsmål :-) men jeg har strikket lidt sammen.

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim fs1 As FileStream
        fs1 = New FileStream("c:\MyGif2.gif", FileMode.Open)
        fs1.Position = 784 'nul tælles med
        fs1.WriteByte(1)
        fs1.Close()
    End Sub

Ovenstående virker hvis jeg laver en gif fil i MS Paint og sætter byte (Position 785) til 1. Men lur mig om ikke du får problemer med forskellige formater af giffer.
Så det jeg gjorde, var at lave en rutine som byte for byte fandt forskellen i 2 ens giffer, hvor den ene var transparent og i mit tilfælde var det byte 785. Den transparente farve jeg brugte var sort, så du vil sikkert være nød til at lure ændringerne af dine egne giffer.

Her er koden til at samenligne to giffer:

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Dim fs1 As FileStream
        Dim fs2 As FileStream
        Dim MyByte As Integer
        Dim MyByte2 As Integer

        fs1 = New FileStream("c:\MyGif2.gif", FileMode.Open)
        fs2 = New FileStream("c:\MyGif_Transparent2.gif", FileMode.Open)
        Do Until fs1.Position = fs1.Length
            MyByte = fs1.ReadByte()
            MyByte2 = fs2.ReadByte()
            If MyByte <> MyByte2 Then
                TextBox1.Text = TextBox1.Text + " " + CStr(fs1.Position) + " " + CStr(MyByte) + " " + CStr(MyByte2)
            End If
        Loop
        fs1.Close()
        fs2.Close()
    End Sub
Avatar billede thewizard Nybegynder
14. februar 2008 - 17:26 #6
Har fundet en anden løsning :) Men giver dig 50% af point for et svar..! Tak for opmærksomheden og tiden du lagde i det.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester