Español
Foro

256-Farben Mapa de bits bearbeiten

 

Rainer
Hoefs
¡Hola zusammen,

Yo muß indizierte 256-Farben Bitmaps, also con eigener Palette, bearbeiten y necesidad dazu Ayuda.

Mapa de bits se en el Speicher geladen.

Davon se una Kopie erstellt el en una entsprechenden Zona rechts erweitert se.

Auf el angefügten Zona se una Rectángulo gemalt con el Palettenindex 249.

Dann voluntad darauf algunos Linien con cierto Palettnnummer elaborado voluntad.

Danach se el Mapa de bits durchsucht, y-Linie para y-Linie jeweils de links después de rechts. Jedes Pixel se en el Farbnummer geprüft, se una vorher festgelegte Farbnummer gefunden se en el neuen Zona en gleicher y-Linie una entsprechender Punkt gesetzt, usw.

Das todo Yo ya como Macro en un Grafikprogramm (Grafx2) con Lua geschrieben y funktioniert hay einwandfrei.

Yo möchte aber el gleiche Programa como selbständige Profano-EXE haben en lo auch sin Grafx2 benutzen a puede.

Was me ahora fehlt son el entsprechenden Características en Profano:

Palettennummer% = Getpixel(X,Y)
SetPixel(x ,y, Patettennummer%)
Line(x1, y1, x2, y2, Palettennummer%)
Rectángulo(x1, y1, x2, y2, Palettennummer%)

Wer ha como una Tip, oder soetwas ya veces gemacht y kann me una Tip geben.

Vielen Dank en el voraus
Rainer
 
03.05.2019  
 




H.Brill
GetPixel y SetPixel hay doch ya.
Yo gehe veces su de, daß con Palettennummer%
una Farbwert gemeint es.
Line ha zwar no Farb-Parámetro, aber el
puede ser bastante simplemente con USEP vorher einstellen.
Und con UseBrush voluntad incluso verschiedene
Schraffuren y el Farbe para Rectángulo eingestellt.

Also müßte sí alles como ser.
Und con StartPaint...EndPaint schaltest du en el
entsprechende Mapa de bits en.
 
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
¡Hola H. Brill,

Exactamente esta Características ir no, como ellos sólo el Übergabe de RGB( ? , ? , ? )-Werten trabajo.

Yo muß aber exakte Palettenindizies transferencia, also de el Palette el Nr. 249 (u otros zwischen 0 y 255).

Das ginge natürlich en uno binär geöffneten BMP con binärem escribir. Pero esto es extremo aufwändig.

trotzdem danke
Rainer
 
03.05.2019  
 




H.Brill
Sí, qué es porque el Palettennummer%, de el
du sprichst ?
Se puede auch con el Características

cada Farbanteile rausziehen, sodaß uno
trotzdem con RGB() trabajo kann :

Yo meinte etwa así :
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
Nein, así va el no.

In uno 256-Farben Mapa de bits hay después de el Encabezamiento una Palette con 3*256 Farbwerten como z.B 001 092 128 para el Farbe 1
254 003 178 para Farbe 2 oder
082 182 209 para 178 y
001 092 128 para el Farbe 200 also gleicher Farbton como Farbe 1 usw.

In el Mapa de bits-Zona son entonces sólo el Referenzen a el Palette gesetzt also 1 2 178 2 200 2 1 178 2 1 usw.

Alle Infos, wo welcher Zona, Encabezamiento, Infoheader, Coreheader, Palette y Mapa de bits en el File beginnen son en el Encabezamiento gespeichert.

Beim Auslesen en un entsprechenden Programa como z.B. Grafx2 oder el uralten DPaint2 se sólo gelesen welchen Paletteneintrag el Punkt ha, also 1 2 oder 178. Dabei es egal welcher Farbton en RGB dahintersteht. Der Punkt ha el Referenz como Palettennummer% a 3 RGB-Werten en el Palette

Yo muß nun el BMP así auslesen: si la Palettennummer% vom Pixel(X,Y) el Nummer 2 es entonces Setpixel(X1,Y, Palettennummer%), si el Nummer 178 es entonces...

En Profano puede ser el no tun, porque como voluntad el RGB-Werte como gesamte Zahl gelesen. Beim setpixel se entonces simplemente una Punkt gesetzt el a nächst passenden Farbe stimmt, en diesem Fall also en Farbe 200 en el Punkt sería el 1 gesetzt, como ellos sí beide el gleichen Valor haben. Liegen el Farben en el Palette eng zusammen, kommt una wirres Bild esta fuera.

Yo kopiere hier veces el LUA-Code hinein para mejor Verständnis:

--Adds a weft-stearing-system right side to the design
--created by Rainer Hoefs - www.rh-design.eu
--This script is free for your personal use.
--Lo voluntad folgende Linien angesetzt
--direkt neben el Design Fb 249 Linie 1
--entonces Fb 4 Linie 2
--Streifen con benutzten Schußfarben Fb 51 - 57 Linie 3
--entonces Fb 1 Linie 4
--Streifen con benutzten Schußfarben Fb 51 - 57 Linie 5
--entonces FB 0 a Trennung Linie 6
--entonces 7 Linien con el Fb 51 - 57 je después de auftreten en el Design a Kontrolle Linien 7 - 13

run("../samples_2.4/libs/memory.lua")
dofile("../samples_2.4/libs/dawnbringer_lib.lua")
dofile("../carpetdesign/include/_language.lua")

--****************************************************

if language == "DE" then
txt1="Schußsteuerungs-Sistema rechts vom Design ansetzen"
txt2="max. Schußwechsler"
txt3="erste Farbe en el Design"
txt4="max. Farben pro Shußlinie"
más
txt1="Add weftstsystem right from the design"
txt2="max. weftsystems"
txt3="first color en design"
txt4="max. colors por 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)

if ok then
-- neue Designgröße berechnen y Design entsprechend vergößern
newdesignw = w + 6 + WeftSystems
oldw = w
setpicturesize(newdesignw, h)
updatescreen()
-- Weiße Fläche con festen Linien rechts vom Design dibujar
drawfilledrect(oldw,0,newdesignw-1,h-1,249) -- rechts el Platz en Fb.249 anfügen
db.line(oldw + 1,0,oldw + 1,h-1,4) -- erste Linie con Fb. 4
db.line(oldw + 3,0,oldw + 3,h-1,1) -- zweite Linie con Fb. 1
db.line(oldw + 5,0,oldw + 5,h-1,0) -- zweite Linie con Fb. 1
updatescreen()
-- Alle Zähler zurücksetzen
WeftColorFound = 0
SearchColor = StartColor
EndColor = StartColor + (WeftSystems - 1)
ControlLine = oldw + 6
-- Design Schuß para Schuß durchsuchen y Punkte en el Linien conjunto!
for y = 0, h-1, 1 do -- el Schußlinien absuchen
for SearchColor = StartColor, EndColor , 1 do -- una Farbe después de el otro suchen
for x = 0, oldw - 1, 1 do -- el Fäden el Schußlinie después de y después de prüfen
c = getpicturepixel(x, y) -- Pixel einlesen
if c == SearchColor then -- si Farbe vom Pixel con Suchfarbe übereinstimmt
WeftColorFound = WeftColorFound + 1 -- Zähler gefundene Farbe conjunto
if WeftColorFound > MaxColorPerWeft then -- si mehr Farben en el Schuß como erlaubt Fehlermeldung
messagebox("Mehr como "..MaxColorPerWeft.." Schußfarben gefunden!\n"..WeftColorFound.." gefunden, "..MaxColorPerWeft.." erlaubt!\nPosition: "..x.." / " ..y)
end
if WeftColorFound == 1 then
putpicturepixel(oldw + 2, y, c) -- Pixel en Steuerlinie 1 conjunto
elseif WeftColorFound > 1 then
putpicturepixel(oldw + 4, y, c) -- Pixel en Steuerlinie 2 conjunto
end
putpicturepixel(ControlLine, y, c) -- Kontrollpunkt conjunto
updatescreen()
-- messagebox("Found SearchColor","X = "..x.."\nY = "..y.."\nSearchColor = "..SearchColor.."\nEndColor = "..EndColor.."\nControlLine = "..ControlLine.."\nWeftColorFound = "..WeftColorFound)
romper
end
end
ControlLine = ControlLine + 1
end
WeftColorFound = 0
ControlLine = oldw + 6
end
updatescreen()
finalizepicture()
end;

Bitte no a el textilen Begriffen como Design, Weftsystem oder Schußlinien stören. Weft y Schuß = Y-Linie
 
04.05.2019  
 




H.Brill
Puesto que hay lo determinado auch para XProfan einiges.
por ejemplo
'########################################
'Farbpalette de Bitmaps auslesen
'########################################
'########################################
'Andrea Miethe Mai 2002
'########################################
SetTrueColor 1
Declarar Info#,RGBQuad_1Bit#,RGBQuad_4Bit#,RGBQuad_8Bit#
Declarar Dateiname$,Colors&,x%,Col&,B%,H%
Dim Info#,200'nimmt el BitmapInfos en
Dateiname$ = @LOADFILE$("Mapa de bits invitar :","*.BMP")
Asignar #1,Dateiname$
OpenRW #1
@BlockRead(#1,Info#,0,200)'BitmapInfos einlesen
Case Word(Info#,28) = 1  : Colors& = 2
Case Word(Info#,28) = 4  : Colors& = 16
Case Word(Info#,28) = 8  : Colors& = 256
window %maxx+1,0-640,480
cls RGB(192,192,192)
USEP 0,0,RGB(255,255,255)

If Word(Info#,0) <> 19778

    Imprimir "Kein Bitmap"

Endif

If Word(Info#,28) > 8

    Imprimir "Kein Palettenbild"

Endif

If Colors& = 2

    Dim RGBQuad_1Bit#,8'  2 Farben-Palette
    Seek #1,54'hier beginnt el Palette
    @BlockRead(#1,RGBQuad_1Bit#,0,8)'BitmapInfos einlesen
    h% = 0

    Sinestar encargado x% = 8

        Col& = RGB(byte(RGBQuad_1Bit#,x%+2),byte(RGBQuad_1Bit#,x%+1),byte(RGBQuad_1Bit#,x%))
        Usebrush 1,Col&
        Rectángulo b%,h% - b%+20,h%+20
        add x%,4
        add B%,20

        if b% > 300

            add h%,20
            b% = 0

        endif

    EndWhile

Elseif Colors& = 16

    Dim RGBQuad_4Bit#,64' 16 Farben-Palette
    Seek #1,54'hier beginnt el Palette
    @BlockRead(#1,RGBQuad_4Bit#,0,64)'BitmapInfos einlesen
    h% = 0

    Sinestar encargado x% = 64

        Col& = RGB(byte(RGBQuad_4Bit#,x%+2),byte(RGBQuad_4Bit#,x%+1),byte(RGBQuad_4Bit#,x%))
        Usebrush 1,Col&
        Rectángulo b%,h% - b%+20,h%+20
        add x%,4
        add B%,20

        if b% > 300

            add h%,20
            b% = 0

        endif

    EndWhile

Elseif Colors& = 256

    Dim RGBQuad_8Bit#,1024'256 Farben-Palette
    Seek #1,54'hier beginnt el Palette
    @BlockRead(#1,RGBQuad_8Bit#,0,1024)'BitmapInfos einlesen
    h% = 0

    Sinestar encargado x% = 1024

        Col& = RGB(byte(RGBQuad_8Bit#,x%+2),byte(RGBQuad_8Bit#,x%+1),byte(RGBQuad_8Bit#,x%))
        Usebrush 1,Col&
        Rectángulo b%,h% - b%+20,h%+20
        add x%,4
        add B%,20

        if b% > 300

            add h%,20
            b% = 0

        endif

    EndWhile

Endif

CloseRW #1
setwindowpos %hwnd = 0,0-640,480
Waitinput
Disponer RGBQuad_1Bit#
Disponer RGBQuad_4Bit#
Disponer RGBQuad_8Bit#
Disponer 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
¡Hola H. Brill,

vielen Dank para el Tip. Sí, el saber Yo, habe lo 1998 auch ya en un Programa así ähnlich ausgeführt.

Yo hoffte allerdings, lo en unkompliziertere Art y Weise lösen a puede, como encima el binäre Lesen y Carta el Mapa de bits.

Aber como muß Yo wohl veces mi Uralt-Routinen aktivieren y desafortunadamente con entsprechendem, Aufwand ändern.

Sombrero Andreas, el sí wirklich spitze war, auch una Rutina para el Auslesen el Mapa de bits (also Bildteil) geschrieben? Und si sí, wo puede ser el auffinden?

Gracias
Rainer
 
04.05.2019  
 




H.Brill
Den Code Tuve de : [...] 

Was el Auslesen el Mapa de bits betrifft, wirst du wohl
selber ran necesario. Algo como es sí auch muy selten
gefragt. Hier Todavía una Erläuterung de
Frank Abbing :

Tiempo sehen, si Yo todavía hinbekommen. Also, el Bmp-Formato con el Offsets:

0 siempre "BM" (2)
2 Longitud el Expediente (4)
6 =0 (4)
10 Offset des ersten Grafikbytes (4)
14 =40 (4)
18 Breite des Bilds (4)
22 Höhe des Bilds (4)
26 ...unwichtig...

Zuerst LongInt Offset 10 auslesen. Hier fangen el Grafikdaten a.
Pro Pixel voluntad 3 Bytes benötigt siempre en el Reihenfolge Blau - Grün - Rot.
Nach cada Línea se el Pixelfolge con Nullbytes en una por 4 teilbare Anzahl ergänzt.
El Pixel des Bilds son de links unten después de rechts oben angeordnet.


Yo denke, daß al Auslesen des Bildteils bastante simplemente hinbekommt.

Kommt entonces natürlich darauf a, qué alles así a Características braucht.

PS: El ProSpeed.dll bietet una Función, el el Nutzdaten uno
Bilddatei en una Byte-Array speichert. ¿Puede du dir evtl. auch veces
ansehen.
 
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
Hier Todavía algo mehr Infos gefunden : [...] 

El Profbmp.dll
Vor allem en el beigefügten Textdatei profbmp.txt
posición 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  
 



Respuesta


Título del Tema, max. 100 Signo.
 

Systemprofile:

Kein Systemprofil creado. [anlegen]

XProfan:

 Contribución  Font  Smilies  ▼ 

Bitte registro en una Contribución a verfassen.
 

Tema opciones

6.839 Views

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

Themeninformationen

Dieses Thema ha 2 subscriber:

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


Admins  |  AGB  |  Applications  |  Autores  |  Chat  |  Política de Privacidad  |  Descargar  |  Entrance  |  Ayuda  |  Merchantportal  |  Pie de imprenta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Juegos  |  Búsqueda  |  Support

Ein Projekt aller XProfan, el lo son!


Mi XProfan
Privado Noticias
Eigenes Ablageforum
Temas-Merkliste
Eigene Beiträge
Eigene Temas
Zwischenablage
Cancelar
 Deutsch English Français Español Italia
Traducciones

Política de Privacidad


Wir uso Cookies sólo como Session-Cookies wegen el technischen Notwendigkeit y en uns hay no Cookies de Drittanbietern.

Wenn du hier en unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung de Informationen en unseren Cookies en XProfan.Net a.

Weitere Informationen a unseren Cookies y dazu, como du el Kontrolle darüber behältst, findest du en unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Yo möchte no Cookie