Français
Forum

256-Farben Bitmap Travailler

 

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
 
03.05.2019  
 




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
 
03.05.2019  
 




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 :
SetPixel x, y, RGB(GetRValue(Palettennummer%), GetGValue(Palettennummer%), GetBValue(Palettennummer%))
 
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
 
04.05.2019  
 




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
 
04.05.2019  
 




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épondre


Topictitle, max. 100 marque.
 

Systemprofile:

ne...aucune Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

s'il te plaît s'inscrire um une Beitrag trop verfassen.
 

Options du sujet

6.662 Views

Untitledvor 0 min.
Rainer Hoefs05.09.2023
H.Brill30.12.2021
Sven Bader23.10.2021
N.Art18.11.2020
plus...

Themeninformationen

cet Thema hat 2 participant:

H.Brill (5x)
Rainer Hoefs (4x)


Admins  |  AGB  |  Applications  |  Auteurs  |  Chat  |  protection des données  |  Télécharger  |  Entrance  |  Aider  |  Merchantportal  |  Empreinte  |  Mart  |  Interfaces  |  SDK  |  Services  |  Jeux  |  cherche  |  Support

un projet aller XProfaner, qui il y a!


Mon XProfan
Privé Nouvelles
Eigenes Ablageforum
Sujets-La liste de voeux
Eigene Posts
Eigene Sujets
Zwischenablage
Annuler
 Deutsch English Français Español Italia
Traductions

protection des données


Wir verwenden Cookies seulement comme Session-Cookies à cause de qui technischen Notwendigkeit et chez uns gibt es aucun Cookies de Drittanbietern.

si du ici sur unsere Webseite klickst ou bien navigierst, stimmst du unserer Erfassung de Informationen dans unseren Cookies sur XProfan.Net trop.

Weitere Informationen trop unseren Cookies et en supplément, comment du qui Kontrolle par-dessus behältst, findest du dans unserer nachfolgenden Datenschutzerklärung.


d'accordDatenschutzerklärung
je voudrais keinen Cookie