Forum | | | | Rainer Hoefs | allô zusammen,
je dois indizierte 256-Farben Bitmaps, alors avec eigener palette, Travailler et besoin en supplément Aider.
Bitmap wird dans den grenier geladen.
en wird une Kopie erstellt qui um une entsprechenden Bereich à droite erweitert wird.
sur dem angefügten Bereich wird un Rectangle gemalt avec dem Palettenindex 249.
ensuite volonté puis quelques Linien avec certain Palettnnummer gezogen volonté.
après wird qui Bitmap durchsucht, y-ligne number pour y-ligne number jeweils de à gauche à droite. chaque Pixel wird sur qui Farbnummer geprüft, wird une auparavant festgelegte Farbnummer trouvé wird im neuen Bereich sur gleicher y-ligne number un entsprechender Punkt gesetzt, usw.
cela ganze habe je bereits comme Macro dans einem Grafikprogramm (Grafx2) avec Lua geschrieben et funktioniert là einwandfrei.
je voudrais mais cela gleiche Programme comme indépendant Profan-EXE avons um es aussi sans Grafx2 benutzen trop peut.
quoi mir maintenant fehlt sommes qui entsprechenden Funktionen dans Profan:
Palettennummer% = Getpixel(X,Y) SetPixel(x ,y, Patettennummer%) Line(x1, y1, x2, y2, Palettennummer%) Rectangle(x1, y1, x2, y2, Palettennummer%)
qui hat là une Tip, ou bien soetwas déjà la fois gemacht et peux mir une Tip donner.
Vielen Dank d'avance Rainer |
| | | | |
| | H.Brill | GetPixel et SetPixel gibt es doch déjà. je vais la fois en aus, qui avec Palettennummer% un Farbwert gemeint ist. Line hat zwar keinen Farb-paramètre, mais den peux on entier simple avec USEP auparavant einstellen. et avec UseBrush volonté sogar verschiedene Schraffuren et qui la couleur pour Rectangle eingestellt.
alors devrait oui alles là son. et avec Début de peinture...EndPaint schaltest du sur qui entsprechende Bitmap um. |
| | | Benutze XPROFAN X3 + FREEPROFAN Wir sind die XProfaner. Sie werden von uns assimiliert. Widerstand ist zwecklos! Wir werden alle ihre Funktionen und Algorithmen den unseren hinzufügen.
Was die Borg können, können wir schon lange. | 03.05.2019 ▲ |
| |
| | Rainer Hoefs | allô H. Brill,
oui c'est ca cet Funktionen aller pas, là vous seulement avec qui Übergabe de RGB( ? , ? , ? )-Werten marcher.
je dois mais exakte Palettenindizies transfert, alors aus qui palette qui Nr. 249 (ou bien autre entre 0 et 255).
cela ginge naturellement dans einer binär geöffneten BMP avec binärem écrivons. c'est mais extrem aufwändig.
quand même merci Rainer |
| | | | |
| | H.Brill | oui, quoi ist car qui Palettennummer%, de qui du sprichst ? On peut aussi avec den Funktionen
chaque Farbanteile rausziehen, si on quand même avec RGB() travailler peux :
je meinte etwa so :
|
| | | Benutze XPROFAN X3 + FREEPROFAN Wir sind die XProfaner. Sie werden von uns assimiliert. Widerstand ist zwecklos! Wir werden alle ihre Funktionen und Algorithmen den unseren hinzufügen.
Was die Borg können, können wir schon lange. | 04.05.2019 ▲ |
| |
| | Rainer Hoefs | non, so allez cela pas.
dans einer 256-Farben Bitmap gibt es pour dem En-tête une palette avec 3*256 Farbwerten comment z.B 001 092 128 pour qui la couleur 1 254 003 178 pour la couleur 2 ou bien 082 182 209 pour 178 et 001 092 128 pour qui la couleur 200 alors gleicher le ton comment la couleur 1 usw.
dans dem Bitmap-Bereich sommes ensuite seulement qui Referenzen trop qui palette gesetzt alors 1 2 178 2 200 2 1 178 2 1 usw.
Alle Infos, wohin quel Bereich, En-tête, Infoheader, Coreheader, palette et Bitmap im File commencer sommes im En-tête gespeichert.
Beim Lecture dans einem entsprechenden Programme comment z.B. Grafx2 ou bien dem uralten DPaint2 wird seulement gelesen welchen Paletteneintrag qui Punkt hat, alors 1 2 ou bien 178. Dabei ist es égal quel le ton dans RGB dahintersteht. qui Punkt hat qui référence comme Palettennummer% le 3 RGB-Werten dans qui palette
je dois eh bien qui BMP so auslesen: si le Palettennummer% vom Pixel(X,Y) qui numéro 2 ist ensuite Setpixel(X1,Y, Palettennummer%), si es qui numéro 178 ist ensuite...
chez Profan peux on cela pas 1faire, car là volonté qui RGB-Werte comme gesamte numéro gelesen. Beim setpixel wird ensuite simple un Punkt gesetzt qui zur nächst passenden la couleur stimmt, dans diesem le cas alors chez la couleur 200 im Punkt serait qui 1 gesetzt, là vous oui beide den gleichen Wert avons. Liegen qui Farben dans qui palette eng zusammen, venez un wirres Bild dabei raus.
je kopiere ici la fois den LUA-Code hinein zum besseren Verständnis:
--Adds a weft-stearing-system right side to le design --created by Rainer Hoefs - www.rh-design.eu --This script is free for your personnel use. --Es volonté folgende Linien angesetzt --direct près de dem Design Fb 249 ligne number 1 --ensuite Fb 4 ligne number 2 --Streifen avec benutzten Schußfarben Fb 51 - 57 ligne number 3 --ensuite Fb 1 ligne number 4 --Streifen avec benutzten Schußfarben Fb 51 - 57 ligne number 5 --ensuite FB 0 zur Trennung ligne number 6 --ensuite 7 Linien avec den Fb 51 - 57 je pour auftreten im Design zur Kontrolle Linien 7 - 13
run("../samples_2.4/libs/memory.lua") dofile("../samples_2.4/libs/dawnbringer_lib.lua") dofile("../carpetdesign/include/_language.lua")
--****************************************************
si language == "DE" then txt1="Schußsteuerungs-System à droite vom Design ansetzen" txt2="max. Schußwechsler" txt3="erste la couleur im Design" txt4="max. Farben pro Shußlinie" d'autre txt1="Add weftstsystem right à partir de le design" txt2="max. weftsystems" txt3="first color dans design" txt4="max. colors per weftline" end
--****************************************************
w, h = getpicturesize()
StartColor = 51 MaxColorPerWeft = 1 WeftSystems = 7
ok, WeftSystems, StartColor, MaxColorPerWeft = inputbox( txt1, txt2, WeftSystems, 1, 20, 7, txt3, StartColor, 1, 255, 3, txt4, MaxColorPerWeft, 1, 7, 2)
si ok then -- neue Designgröße berechnen et Design entsprechend vergößern newdesignw = w + 6 + WeftSystems oldw = w setpicturesize(newdesignw, h) updatescreen() -- Weiße Surface avec festen Linien à droite vom Design zeichnen drawfilledrect(oldw,0,newdesignw-1,h-1,249) -- à droite den place dans Fb.249 anfügen db.line(oldw + 1,0,oldw + 1,h-1,4) -- erste ligne number avec Fb. 4 db.line(oldw + 3,0,oldw + 3,h-1,1) -- zweite ligne number avec Fb. 1 db.line(oldw + 5,0,oldw + 5,h-1,0) -- zweite ligne number avec Fb. 1 updatescreen() -- Alle Zähler zurücksetzen WeftColorFound = 0 SearchColor = StartColor EndColor = StartColor + (WeftSystems - 1) ControlLine = oldw + 6 -- Design Schuß pour Schuß fouiller et Punkte dans qui Linien mettons! for y = 0, h-1, 1 do -- qui Schußlinien absuchen for SearchColor = StartColor, EndColor , 1 do -- une la couleur pour qui anderen chercher for x = 0, oldw - 1, 1 do -- qui Fäden qui Schußlinie pour et pour vérifier c = getpicturepixel(x, y) -- Pixel einlesen si c == SearchColor then -- si la couleur vom Pixel avec Suchfarbe übereinstimmt WeftColorFound = WeftColorFound + 1 -- Zähler gefundene la couleur mettons si WeftColorFound > MaxColorPerWeft then -- si plus Farben im Schuß comme erlaubt Fehlermeldung messagebox("Mehr comme "..MaxColorPerWeft.." Schußfarben trouvé!\n"..WeftColorFound.." trouvé, "..MaxColorPerWeft.." erlaubt!\nPosition: "..x.." / " ..y) end si WeftColorFound == 1 then putpicturepixel(oldw + 2, y, c) -- Pixel dans Steuerlinie 1 mettons elseif WeftColorFound > 1 then putpicturepixel(oldw + 4, y, c) -- Pixel dans Steuerlinie 2 mettons end putpicturepixel(ControlLine, y, c) -- Kontrollpunkt mettons updatescreen() -- messagebox("Found SearchColor","X = "..x.."\nY = "..y.."\nSearchColor = "..SearchColor.."\nEndColor = "..EndColor.."\nControlLine = "..ControlLine.."\nWeftColorFound = "..WeftColorFound) pause end end ControlLine = ControlLine + 1 end WeftColorFound = 0 ControlLine = oldw + 6 end updatescreen() finalizepicture() end;
s'il te plaît pas à den textilen Begriffen comment Design, Weftsystem ou bien Schußlinien stören. Weft et Schuß = Y-ligne number |
| | | | |
| | H.Brill | là gibt es bestimmt aussi pour XProfan einiges. z.B.
'########################################
'Farbpalette aus Bitmaps auslesen
'########################################
'########################################
'Andrea Miethe mai 2002
'########################################
SetTrueColor 1
Déclarer Info#,RGBQuad_1Bit#,RGBQuad_4Bit#,RGBQuad_8Bit#
Déclarer Dateiname$,Colors&,x%,Col&,B%,H%
Faible Info#,200'nimmt qui BitmapInfos sur
Dateiname$ = @LOADFILE$("Bitmap magasin :","*.BMP")
Assign #1,Dateiname$
OpenRW #1
@BlockRead(#1,Info#,0,200)'BitmapInfos einlesen
Cas Word(Info#,28) = 1 : Colors& = 2
Cas Word(Info#,28) = 4 : Colors& = 16
Cas Word(Info#,28) = 8 : Colors& = 256
window %maxx+1,0-640,480
cls RGB(192,192,192)
USEP 0,0,RGB(255,255,255)
Si Word(Info#,0) <> 19778
Imprimer "Kein Bitmap"
Endif
Si Word(Info#,28) > 8
Imprimer "Kein Palettenbild"
Endif
Si Colors& = 2
Faible RGBQuad_1Bit#,8' 2 Farben-palette
Seek #1,54'ici beginnt qui palette
@BlockRead(#1,RGBQuad_1Bit#,0,8)'BitmapInfos einlesen
h% = 0
Whilenot x% = 8
Col& = RGB(byte(RGBQuad_1Bit#,x%+2),byte(RGBQuad_1Bit#,x%+1),byte(RGBQuad_1Bit#,x%))
Usebrush 1,Col&
Rectangle b%,h% - b%+20,h%+20
add x%,4
add B%,20
si b% > 300
add h%,20
b% = 0
endif
Endwhile
Elseif Colors& = 16
Faible RGBQuad_4Bit#,64' 16 Farben-palette
Seek #1,54'ici beginnt qui palette
@BlockRead(#1,RGBQuad_4Bit#,0,64)'BitmapInfos einlesen
h% = 0
Whilenot x% = 64
Col& = RGB(byte(RGBQuad_4Bit#,x%+2),byte(RGBQuad_4Bit#,x%+1),byte(RGBQuad_4Bit#,x%))
Usebrush 1,Col&
Rectangle b%,h% - b%+20,h%+20
add x%,4
add B%,20
si b% > 300
add h%,20
b% = 0
endif
Endwhile
Elseif Colors& = 256
Faible RGBQuad_8Bit#,1024'256 Farben-palette
Seek #1,54'ici beginnt qui palette
@BlockRead(#1,RGBQuad_8Bit#,0,1024)'BitmapInfos einlesen
h% = 0
Whilenot x% = 1024
Col& = RGB(byte(RGBQuad_8Bit#,x%+2),byte(RGBQuad_8Bit#,x%+1),byte(RGBQuad_8Bit#,x%))
Usebrush 1,Col&
Rectangle b%,h% - b%+20,h%+20
add x%,4
add B%,20
si b% > 300
add h%,20
b% = 0
endif
Endwhile
Endif
CloseRW #1
setwindowpos %hwnd = 0,0-640,480
Waitinput
Dispose RGBQuad_1Bit#
Dispose RGBQuad_4Bit#
Dispose RGBQuad_8Bit#
Dispose Info#
end
|
| | | Benutze XPROFAN X3 + FREEPROFAN Wir sind die XProfaner. Sie werden von uns assimiliert. Widerstand ist zwecklos! Wir werden alle ihre Funktionen und Algorithmen den unseren hinzufügen.
Was die Borg können, können wir schon lange. | 04.05.2019 ▲ |
| |
| | Rainer Hoefs | allô H. Brill,
vielen Dank pour den Tip. oui, cela kenne je, habe es 1998 aussi déjà dans einem Programme so ähnlich fonctionnement.
je hoffte allerdings, es sur unkompliziertere Art et Weise lösen trop peut, comme sur cela binäre Lesen et écrivons qui Bitmap.
mais là doit je wohl la fois mon Uralt-Routinen aktivieren et malheureusement avec entsprechendem, Aufwand changement.
Hat Andreas, qui oui wirklich spitze était, aussi une Routine pour cela Lecture qui Bitmap (alors Bildteil) geschrieben? et si oui, wohin peux on qui auffinden?
merci Rainer |
| | | | |
| | H.Brill | Den Code J'ai eu de : [...]
quoi cela Lecture qui Bitmap betrifft, wirst du wohl selber ran doit. Quelque chose comme ist oui aussi très selten gefragt. ici habe je encore une Erläuterung de Frank Abbing :
la fois voyons, si je es encore hinbekommen. alors, cela Bmp-Format avec den Offsets:
0 toujours "BM" (2) 2 Longueur qui Dossier (4) 6 =0 (4) 10 Offset des ersten Grafikbytes (4) 14 =40 (4) 18 Breite des Bilds (4) 22 Hauteur des Bilds (4) 26 ...unwichtig...
d'abord LongInt Offset 10 auslesen. ici attraper qui Grafikdaten à. Pro Pixel volonté 3 Bytes nécessaire toujours dans qui Reihenfolge bleu - vert - rouge. Pour chacun la ligne wird qui Pixelfolge avec Nullbytes sur une par 4 teilbare Anzahl ergänzt. qui Pixel des Bilds sommes de à gauche unten à droite dessus angeordnet.
je denke, qui on cela Lecture des Bildteils droite simple hinbekommt.
venez ensuite naturellement puis à, quoi on alles so à Funktionen braucht.
PS: qui ProSpeed.dll bietet une Funktion, qui qui Nutzdaten einer Bilddatei dans un Byte-Array speichert. peux du dir peut-être. aussi la fois regarder. |
| | | Benutze XPROFAN X3 + FREEPROFAN Wir sind die XProfaner. Sie werden von uns assimiliert. Widerstand ist zwecklos! Wir werden alle ihre Funktionen und Algorithmen den unseren hinzufügen.
Was die Borg können, können wir schon lange. | 04.05.2019 ▲ |
| |
| | H.Brill | ici habe je et avec ca plus Infos trouvé : [...]
qui Profbmp.dll avant allem dans qui beigefügten Textdatei profbmp.txt stehen interessante Infos. |
| | | Benutze XPROFAN X3 + FREEPROFAN Wir sind die XProfaner. Sie werden von uns assimiliert. Widerstand ist zwecklos! Wir werden alle ihre Funktionen und Algorithmen den unseren hinzufügen.
Was die Borg können, können wir schon lange. | 04.05.2019 ▲ |
| |
|
répondreOptions du sujet | 6.662 Views |
Themeninformationencet Thema hat 2 participant: |